【问题标题】:Returning an integer array from a function in C从 C 中的函数返回整数数组
【发布时间】:2013-07-19 10:22:43
【问题描述】:

我的程序如下

#include<stdio.h>

int *intial(int);

int main (void)
{
    int i, *b;

    b=intial(5);
    for(i=0;i<5;i++)
        printf("%d\t",*(b+i));
    getch();
}

int *intial(int t)
{
    int i, *a; 

    for(i=0;i<t;i++)
        a[i]=i;
    return a;
}

但是我得到了垃圾值。

我也试过了

int *intial(int t)
{
    int i, a[10];

    for(i=0;i<t;i++)
        a[i]=i;    
    return a;
}

但它不起作用。

【问题讨论】:

  • 您希望a 在不初始化的情况下指向哪里?指针不是魔术...
  • 未定义的行为,因为未分配 a。试试int *a = malloc(t * sizeof(int));。在你的程序退出之前记住free(b)
  • why does this function return garbage value 和 625482976472 类似问题可能重复。
  • Bleeeech ... 那是什么编码风格?随机压痕,奇怪的东西等等......你希望我们如何真正阅读这个?
  • 我过去回答过一个类似的问题(不重复):stackoverflow.com/a/8779787/509868

标签: c arrays pointers


【解决方案1】:

为了正常工作,你的函数应该是

int *intial(int t)
{
    int i;
    int *a = malloc(t * sizeof(*a));
    if (!a) return NULL; // error checking
    for(i=0;i<t;i++) {
        a[i]=i;
    }
    return a;
}

这个函数的“调用约定”是返回的指针是一个malloc()ed,调用者有义务去free()它。

当然,调用者也应该进行适当的错误检查:

int main()
{
    int i;
    int *b;
    b=intial(5);
    if (!b) {
        fprintf(stderr, "Malloc error.\n");
        return 1;
    }
    for(i=0;i<5;i++) {
        printf("%d\t",*(b+i)); // *(b+i) should be replaced with b[i] for readability
    }
    free(b); // free the memory
    return 0;
}

【讨论】:

    【解决方案2】:

    您需要使用malloc() 为您的数组分配内存。否则ab 不会特别指向任何东西。

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2021-12-04
      相关资源
      最近更新 更多