发布模式下的memcpy问题

时间:2013-06-19 05:57:02

标签: c visual-studio-2008

我有一段代码在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);

这在调试模式下完美运行,但在发布时崩溃。任何人都可以指出错误吗?

3 个答案:

答案 0 :(得分:1)

它看似合法,像往常一样小小的挑剔:

  1. Don't cast the return value of malloc() in C
  2. 使用更多constbuffposlen都应声明为const
  3. 最重要的是,在访问内存之前检查malloc()的返回值。

答案 1 :(得分:1)

显示的代码部分看起来很好。作为unwind答案的补充。失败的可能原因可能是

1)未初始化的变量

2)预处理器符号_DEBUG和NDEBUG。如果#ifdef _DEBUG / #endif块中有任何代码。

3)编译器优化

答案 2 :(得分:-1)

使用malloc时尝试

temp  = malloc((len + 1) *sizeof(*temp));