读取返回的数组指针时出现分段错误

时间:2019-04-29 09:41:05

标签: c arrays pointers segmentation-fault

我是C的新人。

我正在关注一个教程,该教程说明了如何从函数中返回数组:https://codeforwin.org/2017/12/pass-return-array-function-c.html#return-array-1d

当我尝试运行他的代码时,发生分段错误。

我编辑了他的代码以使其更清晰,但仍然存在分段错误。

当我尝试使用返回数组指针的函数访问数组初始化时,发生分段错误。

#include <stdio.h>
int * getArray()
{
    int num[] = {1, 2, 3, 4, 5};
    printf("Array inside function: \n");
    for (int i = 0; i < 5; ++i)
    {
        printf("i = %d\n", num[i]);
    }
    return num;
}

int main()
{
    int * num = getArray();
    printf("Array outside function: \n");
    for (int i = 0; i < 5; ++i)
    {
        printf("i = ");
        printf("%d\n", num[i]);
    }
    return 0;
}

当我运行已编译的二进制文件“ a.out”时,会发生以下情况

$ a.out
Array inside function: 
i = 1
i = 2
i = 3
i = 4
i = 5
Array outside function: 
[1]    32198 segmentation fault (core dumped)  a.out

如您所见,getArray运行,main()的下一行上的printf运行,但是随后它会产生一个段fult。

编辑: 我更改了代码,使GetArray接受一个参数,并将数组赋值给该参数。没有警告,同样的错误


#include <stdio.h>
void getArray(int *dest)
{
    int num[] = {1, 2, 3, 4, 5};
    printf("Array inside function: \n");
    for (int i = 0; i < 5; ++i)
    {
        printf("i = %d\n", num[i]);
    }
    dest = num;
}

int main()
{
    int * num; 
    getArray(num);
    printf("Array outside function: \n");
    for (int i = 0; i < 5; ++i)
    {
        printf("i = ");
        printf("%d\n", num[i]);
    }
    return 0;
}

我认为这很清楚,问题不在于变量范围,也不是重复的问题。

0 个答案:

没有答案