调用自由方法时出现分段错误(核心转储)错误

时间:2013-08-30 13:10:31

标签: c arrays free

我试图释放一个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.

2 个答案:

答案 0 :(得分:4)

循环中的free(array[i]);行有问题。 array[i]是一个char值(实际上是整数提升的int)并将该值传递给free将被视为指针。现在你试图释放那个你根本不知道的地址。

答案 1 :(得分:1)

存在多个问题:

  1. 您无需在字符串的每个字符上调用free()。只需致电free(array)
  2. {li} sizeof(char*) malloc()realloc()不正确。