過去幾天我一直在爲C類的任務開展工作,並且遇到了關於在C中的realloc()函數的奇怪崩潰。即使是C /內部的C++程序員無法立即回答我的代碼可能出錯的原因。通過調用realloc()幾次導致C程序崩潰
首先,我在一個函數創建的內存塊:
char *line = (char *)malloc(sizeof(char) * BUFSIZE);
然後我打電話getMoreBuf(start_of_block, end_of_block)
int getMoreBuf(char *start, char *end)
{
char *newBuf = 0;
int newSize = (end - start) + BUFSIZE;
newBuf = (char *)realloc(start, sizeof(char) * newSize);
if(NULL == newBuf) {
printf("No virtual RAM available");
}else{
start = newBuf;
}
return newSize;
}
取決於我設置爲,其第5通話後崩潰BUFSIZE(BUFSIZE = 1)或第三次調用(BUFSIZE = 5),並用廢話替換讀入的字符。
難道有人指向我的錯誤並給出建議在哪裏閱讀以解決它們? 任何幫助表示讚賞。 :)
Bonus問題:我malloc一個內存塊,其中指針1指向的開始和指向後面的指針2 point2指向內存塊中的單個塊。我realloc()塊和塊由於大小問題而移動,指針2是否仍舊指向舊的(現在無用的)塊,或者是否會隨着realloc「移動」到內存塊的新位置?
(也對於未來,我應該把額外的問題,到一個新的問題,或者我可以留在這兒,因爲它是密切相關的第一個問題?)
感謝大家的投入,它幫助我瞭解出了什麼問題。 如果我能我將每個標記爲正確答案,因爲每個幫助我以某種形式瞭解更多關於這些該死的指針業務。 =)
[*即使程序員*](http://c-faq.com/ptrs/passptrinit。html)也許你應該試過C程序員? – cnicutar 2012-02-14 08:58:02
是的,我試過一個C和一個C++程序員,我只是忘了提到這一點。我解決了這個問題,我會查看鏈接。 – Plastefuchs 2012-02-14 09:08:58