2013-06-19 72 views
-1

我有一段代码,它在Visual Studio的调试模式下工作良好,但在发布模式下崩溃。经过大量的猜测工作后,我发现了导致崩溃的那段代码。memcpy在发布模式下的问题

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); 

这在调试模式下完美工作,但在发布时崩溃。有没有人指出这个错误?

+1

我在这两种调试模式下检查这段代码在Visual Studio 2010和发布模式......它完美。我假设你怀疑这段代码在一个大程序中..我不得不说,这部分不会产生麻烦 – hazzelnuttie

+0

你有没有“free”指针分配 – hazzelnuttie

+0

@hazzelnuttie我解决了这个问题,我在某个地方在此代码之上,strlen(temp + 3)而不是strlen(temp)+3! – user1692342

回答

1

所示的代码部分的外观与fine.As失败的退绕的answer.Possible原因的加成可能是

1)未初始化变量

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

3)编译器优化

+0

尝试,没有工作:( – user1692342

+0

关闭优化后你尝试过吗? –

+0

是的,我试图通过关闭优化 – user1692342

1

它看起来合法的,一些小的挑剔和往常一样:

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

试了一下,malloc返回内存,所以这不是问题 – user1692342

-1

当您使用malloc尝试

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

尝试过,没有工作 – user1692342

+0

这是毫无意义的,'sizeof * temp == sizeof(char)== 1'因此缩放没有效果。 – unwind