-1

文字の配列用にメモリ空間を解放しようとしています:

        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 に答える