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()Cの戻り値をキャストしないでください
  2. more const:buffを使用し、すべて宣言する必要がありposます。lenconst
  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 try を使用する場合

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