2013-06-19 95 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