当前位置:  开发笔记 > 编程语言 > 正文

memset()导致数据中止

如何解决《memset()导致数据中止》经验,为你挑选了1个好方法。

在调用时,我的一些代码中出现了一些奇怪的,间歇性的数据中止(<5%的时间)memset().问题是,除非代码运行了几天,否则通常不会发生,因此很难在行为中捕获它.

我正在使用以下代码:

char *msg = (char*)malloc(sizeof(char)*2048);
char *temp = (char*)malloc(sizeof(char)*1024);
memset(msg, 0, 2048);
memset(temp, 0, 1024);
char *tempstr = (char*)malloc(sizeof(char)*128);

sprintf(temp, "%s %s/%s %s%s", EZMPPOST, EZMPTAG, EZMPVER, TYPETXT, EOL);
strcat(msg, temp);

//Add Data
memset(tempstr, '\0', 128);
wcstombs(tempstr, gdevID, wcslen(gdevID));
sprintf(temp, "%s: %s%s", "DeviceID", tempstr, EOL);
strcat(msg, temp);

正如你所看到的,我并没有尝试使用尺寸大于最初分配的memset malloc()

有人看到这可能有什么问题吗?



1> Joel Spolsky..:

mallocNULL如果没有可用的内存,则可以返回 你没有检查.


还要注意,由于乐观分配,并不是因为maloc()返回非null,因为你有足够的内存.它将在第一次实际访问内存时失败,这将在这里... memset().
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有