我是C编程新手。看看我的代码&指出我在哪里做错了?这是我创建一个应该返回int数组的范围函数的代码。
<img src={"./../img/slide2.jpg"} />
答案 0 :(得分:3)
您将返回一个本地数组的地址,该数组的生命周期以函数结束。
更改
int last[b];
到
int *last = malloc(sizeof(int) * b);
请勿忘记在free(r);
printf
答案 1 :(得分:1)
这是工作代码
#include<stdio.h>
int * range(int a, int b);
int main()
{
int *r;
int j;
r = range(0,5);
printf("%d",r[1]); // Outputs 1
free(r);
return 0;
}
int * range(int a, int b){
int *last = malloc(sizeof(int) * b);
int i,j;
for(i=a;i<b;i++){
last[i] = i;
}
return last;
}
您可以在Ideone https://ideone.com/OzaYoL
中投放答案 2 :(得分:1)
您的直接问题是last
函数退出时range
数组不再存在,因此返回的指针不再有效。
如果您希望range
为数组留出内存并初始化其内容,那么您必须动态分配内存:
int *range( int a, int b )
{
int *last = malloc( sizeof *last * b );
if ( last )
{
for ( size_t i = a; i < b; i++ )
last[i] = i;
}
return last;
}
当你完成记忆时,你需要记住free
记忆。
快速评论 - 我不清楚在设置值时您打算如何range
工作。如果您致电range(3,6)
,则会获得6个元素的数组,但您只需设置last[3]
,last[4]
和last[5]
的值,让last[0]
通过last[2]
包含不确定的值。如果那是你想要的,那很好。如果没有,你会想重新考虑一下。
答案 3 :(得分:0)
这是因为您的函数int * range(int a, int b);
返回本地变量的地址。因此,为了纠正它,您必须动态将内存分配给last
。
试试这段代码:
int *last=(int *)malloc(sizeof(int)*b);
这样可行。