我试图释放一个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.
答案 0 :(得分:4)
循环中的free(array[i]);
行有问题。 array[i]
是一个char值(实际上是整数提升的int)并将该值传递给free
将被视为指针。现在你试图释放那个你根本不知道的地址。
答案 1 :(得分:1)
存在多个问题:
free()
。只需致电free(array)
。sizeof(char*)
malloc()
和realloc()
不正确。
醇>