关于C语言指针释放的问题

Python013

关于C语言指针释放的问题,第1张

这段话中有好几个错误。

1. 如果有int A, int *B = &A, 这时执行free(B) 一定引起内存错误。

free只能使用在动态分配的内存上,不能用在堆栈或静态数据上。

类似 int A,或 static int A,这样的变量定义,是在编译时已经确定了内存位置。

动态分配是在运行时,从堆中临时分配的内存块(用malloc,或new)。这些内存块需要用 free(malloc)或delete(new)释放;

2. 变量名实际是内存地址的代称,这句也不完全对

在程序中,变量名代表了“这个地址上的数值”,只有对变量使用&操作,才能得到变量的地址

3. free(B)应该释放了B这个指针变量

如果指针变量存放了一个动态得到的地址,free(B)释放的是变量B的数值(不是变量B的地址),由于变量B的数值是一个动态分配得到的地址,所以free释放的是动态地址。

//用指针的指针当二维数组请参考以下代码 

#include <stdio.h>

#include <stdlib.h>

int main(){

int **b

b=(int **)malloc(sizeof(int *)*4)   //二维数组b有4行 

for(int i=0i<4i++)    //替每行分配存储空间 

b[i]=(int *)malloc(sizeof(int)*3)  //二维数组b每行3列 

for(int i=0i<4++i) for(int j=0j<3j++)

b[i][j]=i*j

for(int i=0i<4++i) {

for(int j=0j<3j++) 

printf("%5d",b[i][j])

printf("\n")

}

for(int i=0i<4i++)

free(b[i])  //释放每行的存储空间 

free(b)//释放b

return 0

}