【发布时间】:2018-12-06 21:02:57
【问题描述】:
我刚开始学习 c 编码,我有几个关于二维矩阵和 free() 命令的问题。
我知道你首先需要创建一个带有指针的数组,指向矩阵的不同列:
double **array = (double **)malloc(5*sizeof(double *));
for(int n = 0; n<5; n++){
array[n] = (double *) malloc(6*sizeof(double));
我知道释放此矩阵的正确方法是首先释放各个行,然后释放数组指针本身。大致如下:
for (i = 0; i < nX; i++){
free(array[i]); }
free(array);
我的问题是:为什么这是必要的?我知道这是不正确的,但你为什么不能只使用:free(array)?据我了解,这将释放指针数组。当其他东西需要访问它时,列使用的内存不会被覆盖吗? free(array) 会以任何方式导致内存损坏吗?
非常感谢任何帮助!
【问题讨论】:
-
它不是二维数组。它是一个包含指向其他数组的指针的数组。所有这些其他数组都存在于内存中的其他位置,需要释放。
-
@ChristianGibbons:它是指向指针的指针,而不是指向数组的指针。
-
@toohonestforthissite 我想保持清楚,这些不是单一的对象。很难以技术上正确但仍然清晰的方式来描述。
-
不释放行不会导致内存损坏,它只是意味着在程序的生命周期内永远不能再次使用内存(因为它已经被分配并且没有被释放,但你没有知道它在哪里)。如果你这样做太多,你会耗尽内存。
标签: c arrays memory-management malloc free