欢迎对我的帖子质量发表任何评论,我是新的。
1)函数结束后,4 个字节的 temp(指针)会被清除吗?
2)(不是来自下面的代码)如果我有指向地址 A 的指针 1 并且我将地址 A 复制到指针 2,如何释放指针 1(4 个字节作为整数)占用的内存并仅保留新的指针 2?
(下面的代码)代码从用户那里获取一个数字(假设 4),并使用一个函数来制作一个大小为 4 的数组,每个插槽中都有 1
。int * Array_K_Size(int number)
{
int *temp;
temp = (int *) calloc(number,sizeof(int));
for ( int i=0; i<number; i++)
temp[i] = 1;
return temp;
}
int main()
{
int number,*ptr=NULL;
printf("Give number: ");
scanf("%i",&number);
ptr = Array_K_Size(number);
for ( int i=0; i<number; i++)
printf("Position %3i of array is: %3in",i+1,ptr[i]);
return 0;
}
在函数中
int * Array_K_Size(int number)
{
int *temp;
temp = (int *) calloc(number,sizeof(int));
for ( int i=0; i<number; i++)
temp[i] = 1;
return temp;
}
您动态分配了一个数组,并返回了指向其第一个元素的指针。
其值分配给指针ptr
ptr = Array_K_Size(number);
即指针ptr
获取存储在本地指针温度中的值的副本。局部变量 temp 在退出函数后将不处于活动状态。尽管如此,分配的动态内存在函数外部仍然有效。
要释放分配的内存,您只需调用
free( ptr );
指针temp
的作用域是函数Array_K_Size
的主体。
指针ptr
的作用域是函数main
的主体。
来自 C 标准(6.2.4 对象的存储持续时间)
5 一个对象,其标识符被声明为没有链接且没有链接 存储类说明符 static 具有自动存储持续时间, 就像一些复合文字一样。
和
6 对于没有可变长度数组类型的此类对象,它的生命周期从进入它所在的块开始延长 关联,直到该块的执行以任何方式结束
指针temp
和ptr
都有自动存储持续时间,但每个指针都在各自的块中声明。