-1

我正在尝试为 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.
4

2 回答 2

4

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

于 2013-08-30T13:21:51.003 回答
1

有多个问题:

  1. 您不需要调用free()字符串的每个字符。只要打电话free(array)
  2. sizeof(char*)malloc()并且realloc()是不正确的。
于 2013-08-30T13:11:40.960 回答