双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

问个关于函数内返回指针变量的问题。谢谢

summerYe summerYe 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h>   
#include<stdlib.h>
int * make_array(int elem,int val) //1.是不能返回局部变量的地址还是不能返回局部变量的指针?
{
int i;
int *array = (int*) malloc(elem * sizeof(int));//这里可以直接把指针名当数组名使用
if(NULL == array)
exit(1);
for (i = 0; i < elem; i++)
array[i] = val;
return array;//这里array虽然是是一个指针,这里返回的是其值而非返回其地址,即不能返回&array,
}//2.这里函数结束后array被销毁是否意味着&array这块内存不再存且没有东西指着maolloc这块内存?还意味着其他什么东西呢?
void show_array(const int ar[], int n)
{
int r = 0;
int i = 0;
for(; i < n; i++)
printf("%3d", ar[i]);
printf("\n");

}


int main(void)
{
int * pa;
int size;
int value;
printf("enter the number of elements: ");
scanf("%d", &size);

while (size > 0)//不断地建新数组,不断试验这个程序。
{
printf("enter the initialization value: ");
scanf("%d", &value);
pa = make_array (size,value);
if(pa)
{
show_array(pa,size);
free(pa);
}
printf("enter the number of elements (<1 to quit): ");
scanf("%d",&size);
}
return 0;
}


上面有两个问题在注释里,还有两个问题3. array自身在栈上可以理解,为什么说&array在堆上呢,且栈上的指针删除了其指向的内容是不是脱钩了(即泄露了)在make_array函数里面也没看到free内存?4.这些代码有没有问题?如果有怎么修改。
...全文
评论 3
收藏 已收藏
分享
返回顶部
summerYe
C++ 语言 65,214 成员 250,514 内容