在c中返回具有自定义函数的数组不起作用

时间:2018-05-23 20:17:16

标签: c arrays function

我是C编程新手。看看我的代码&指出我在哪里做错了?这是我创建一个应该返回int数组的范围函数的代码。

<img src={"./../img/slide2.jpg"} />

4 个答案:

答案 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);

这样可行。