我試圖運行此程序,其中創建了一個字符數組並動態分配了內存。之後,數組元素將填充10個連續位置的字符串「hello」。使用strdup()函數調用將值分配給字符串元素。在while循環中釋放()
一旦分配了所有元素,元素就會在while循環中釋放。當我在Visual Studio中運行程序時,在最後一個指向char數組的指針被釋放後,程序崩潰。我相信while循環的終止條件是正確的。但是我無法確定究竟是什麼導致了這個問題。
代碼:
char **p;
int i;
p = malloc(10 * sizeof(char *));
for (i = 0; i < 10; i++) {
p[i] = strdup(「hello」);
}
while (*p) {
free(*p++);
}
'* p'是類型指針,不會被評估爲* false *,除非它是'NULL'。當你超出數組「p」的範圍時,'* p'不會神奇地評估爲NULL。然而,你可以通過自己採取額外的措施來使其工作,即'p = malloc(11 * sizeof * p); p [10] = NULL;/*其餘部分與你的一樣* /' – ThoAppelsin 2014-10-07 06:44:38