【发布时间】:2018-09-01 02:21:05
【问题描述】:
我有这个代码段:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ** ar;
int i;
ar = malloc( 2 * sizeof(int*));
for(i=0; i<2; i++)
ar[i] = malloc ( 3 * sizeof(int) );
ar[0][0]=1;
ar[0][1]=2;
ar[0][2]=5;
ar[1][0]=3;
ar[1][1]=4;
ar[1][2]=6;
for(i=0; i<2; i++)
free(ar[i]);
free(ar);
printf("%d" , ar[1][2]);
return 0;
}
我浏览了一些关于这个主题的主题 (how to free c 2d array) 但他们已经很老了,没有人活跃。
我对代码有以下疑问:
这是为 C 中的二维数组释放内存的正确方法吗?
如果这是正确的方法,那么为什么我在尝试打印时仍然得到相应的数组值?这是否意味着内存没有被正确释放?
内存释放后会发生什么情况?我存储的所有值是否都被删除了,或者它们只是留在等待重新分配的内存中?
这是预期的未定义行为吗?
【问题讨论】:
-
这不是一个二维数组,而是一个指针数组。 C 有名副其实的二维数组。它们通过一次调用
malloc被分配,一次调用free被释放。使用它们。 -
@JensGustedt 你的意思是我一次性分配内存并使用指针算法访问值的那些数组吗?
-
格式/缩进错误。
-
释放后访问内容是未定义的行为。 UB 不保证任何特定的故障模式(这就是它被称为“未定义”的原因)。
标签: c heap-memory dynamic-allocation