我有使用malloc分配內存的問題。 這裏是從我的代碼的片段:malloc函數崩潰
printf("DEBUG %d\n",L);
char *s=(char*)malloc(L+2);
if(s==0)
{
printf("DEBUGO1");
}
printf("DEBUGO2\n");
它輸出「DEBUG 3」,然後一個錯誤MSGBOX出現此消息:
在「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,它是沒有任何庫純C):
呼叫的程序作爲 「cbproj.exe s.pl」(該s.pl文件是在arhive的根)
和可能看到它崩潰時它稱之爲功能在「parser.tab.c」(其中函數concat3被寫入)的第113行的「malloc」上。
我在教育採購項目,你可以使用源代碼沒有任何限制。
UPD3: 的問題是,它沒有分配足夠的內存在程序中的字符串中的一個,但它似乎直到下一個malloc的工作。呵呵,我討厭C現在:) 我同意關於糟糕的編碼風格的評論,需要在這方面提高自己。
您的代碼不完整;什麼是'L'? –
錯誤在別處。請發佈相關代碼。 –
你應該用NULL來比較而不是0 – BlackBear