簡體   English   中英

調用free方法時出現分段錯誤(核心轉儲)錯誤

[英]Segmentation fault (core dumped) error when free method is called

我正在嘗試為char數組釋放內存空間:

        static void cleanArray(char* array)
                {
                    int i;
                    int size = strlen(array) + 1;
                    for(i = 0; i < size; i++)
                        free(array[i]);
                    free(array);
                }

    int main(){
    char* array = (char *)malloc(1 * sizeof(char*));
    int c;
    for(c=0;c<100;c++){         //code to populate some string values in the array.
    void *p = realloc(array, (strlen(array)+strlen(message)+1)*sizeof(char*));
    array = p;
    strcat(array, "some string");
    }

cleanArray(array);           //I get error only when I call this method.
    }

但是對於以上代碼,我遇到了Segmentation fault錯誤。

當我只嘗試以下代碼而不是cleanArray()時,我不認為該數組已釋放:

    free(array);
printf("%s",array); //it prints all the values in the array. Hence, I concluded it is not freedup.

free(array[i]); 循環中有問題。 array[i]是一個char值(通過整數提升實際上是int),並將該值傳遞給free將被視為指針。 現在,您正在嘗試釋放對該地址不了解的地址。

存在多個問題:

  1. 您不需要在字符串的每個字符上調用free() 只需調用free(array)
  2. malloc()realloc() sizeof(char*)不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM