mallocを使用したメモリ割り当てに問題があります。ここ は私のコードからの断片である:malloc関数がクラッシュする
printf("DEBUG %d\n",L);
char *s=(char*)malloc(L+2);
if(s==0)
{
printf("DEBUGO1");
}
printf("DEBUGO2\n");
それは「DEBUG 3」を出力し、その後、エラーメッセージボックスがこのメッセージが表示されます:
「0x0000000」で0x7c9369aa参照メモリでの命令。 メモリを読み取れませんでした
私にとっては、このような動作は非常に奇妙です。 ここで何が間違っていますか?
アプリケーションはシングルスレッドです。
私はコードで構築されたのMinGWのCコンパイラを使用しています::ブロック10.05
場合、必要に応じて、私はすべてのコードを提供することができます。おかげさまで
UPD1: は、より多くのコードがある:
char *concat3(char *str1,char *str2,char *str3)
{
/*concatenate three strings and frees the memory allocated for substrings before*/
/* returns a pointer to the new string*/
int L=strlen(str1)+strlen(str2)+strlen(str3);
printf("DEBUG %d\n",L);
char *s=(char*)malloc(L+2);
if(s==0)
{
printf("DEBUGO1");
}
printf("DEBUGO2\n");
sprintf(s,"%s%s%s",str1,str2,str3);
free(str1);
free(str2);
free(str3);
return s;
}
UPD2: それは問題は、私が思ったよりも複雑であるようです。誰かが持っているだけであれば私を助けるために十分な時間:
をここでは、すべてのコード
(それがコード::ブロック10.05プロジェクトですが、あなたは、IDEなしでそれをソースをコンパイルしています として
呼び出しプログラム「cbproj.exe s.pl」(s.plファイルがarhiveのルートにある)
は、あなたはときにクラッシュ表示されることがあります。純粋なC)は、任意のライブラリなしですそれはfunctiを呼び出す"parser.tab.c"(関数concat3が書かれている)の113行目にある "malloc"上にある。
私は教育的な目的でプロジェクトを行っていますが、あなたは何の制限もなくソースコードを使用することができます。
UPD3: 問題は、それがプログラム内の文字列のいずれかのために十分でないメモリを割り当てられていたということでしたが、次のmallocまで動作するように見えた...ああ、私は今Cを嫌い:) を私は同意します悪いコーディングスタイルに関するコメントで、これを改善する必要があります。
コードは不完全です。 'L'とは何ですか? –
エラーは他の場所です。関連するコードを投稿してください。 –
0の代わりにNULLと比較する必要があります – BlackBear