我有一段代码在visual studio的调试模式下工作正常,但在发布模式下崩溃。经过大量的猜测工作后,我找到了导致崩溃的代码片段。
char *buff ="some random text";
char *temp = NULL;
char *pos = NULL;
int len = strlen("random text");
pos = strstr(buff,"random");
temp = (char *) malloc(len+1);
memset(temp,0,len+1);
memcpy(temp,pos,len);
这在调试模式下完美运行,但在发布时崩溃。任何人都可以指出错误吗?
答案 0 :(得分:1)
它看似合法,像往常一样小小的挑剔:
malloc()
in C。const
:buff
,pos
和len
都应声明为const
。malloc()
的返回值。答案 1 :(得分:1)
显示的代码部分看起来很好。作为unwind答案的补充。失败的可能原因可能是
1)未初始化的变量
2)预处理器符号_DEBUG和NDEBUG。如果#ifdef _DEBUG / #endif块中有任何代码。
3)编译器优化
答案 2 :(得分:-1)
使用malloc时尝试
temp = malloc((len + 1) *sizeof(*temp));