我怎么能控制free()函数工作正常?

use*_*224 1 c malloc free multidimensional-array

我有一个关于C的free()函数的小问题.

我在程序中使用以下代码分配多维数组:

char **newMatrix( int N ){
    int i,j;
    char **a = malloc(sizeof *a * N);
    if (a)
    {
      for (i = 0; i < N; i++)
      {
        a[i] = malloc(sizeof *a[i] * N);
      }
    }
Run Code Online (Sandbox Code Playgroud)

在程序结束时,数组中充满了字符.所以我这样做是为了释放内存.

void freeArray(char **a, int m){
    int i;
    for (i = 0; i < m; ++i) {
        free(a[i]);
    }
    free(a);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎样才能真正检查free()函数是否运行良好,并释放所有内存?我问你因为我试图在freeArray之后打印矩阵,结果是值仍然存储在a [i] [j]列和行中.

对不起,如果这是一个愚蠢的问题,我是C编程的新手!

Sat*_*ish 5

free并不意味着它实际上会删除内存!它会告诉操作系统我不再需要这个内存,将它用于其他一些进程!

你可以a在打电话后继续使用数组free(a),没有什么能阻止你.但是,结果将完全未定义且不可预测.它只适用于运气.这是一个常见的编程错误,称为" 免费使用 ",它在许多程序中工作了几年而没有"问题" - 直到它引起问题.

有很多工具可以很好地发现这些错误,比如Valgrind.