0

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

这在调试模式下完美运行,但在发布时崩溃。有人能指出错误吗?

4

3 回答 3

1

它看起来很合法,像往常一样有一些小问题:

  1. 不要强制转换malloc()in C的返回值。
  2. 使用更多constbuffpos并且len应该全部声明const
  3. malloc()最重要的是,在访问内存之前检查 的返回值。
于 2013-06-19T06:02:28.383 回答
1

显示的代码部分看起来不错。作为展开的答案的补充。失败的可能原因可能是

1)未初始化的变量

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

3)编译器优化

于 2013-06-19T06:10:05.423 回答
-1

当你使用 malloc 尝试

temp  = malloc((len + 1) *sizeof(*temp));
于 2013-06-19T06:10:38.583 回答