0

我有这个代码与 2 个文件交互,但是我在这两个函数中遇到了分段错误,我需要帮助找出原因。fileA.c将 an 传递int**给 in 中的函数fileB.cint**用作输出参数,因为我想在 in 中创建一个 int 数组fileBfoo指向它,以便我可以在中打印它fileA。在fileB.c中,我创建了一个数组,并将指针设置为它。

size 和 foo 在主文件的另一个函数中初始化。它编译得很好,但输出是 (if size == 10) :

0 1 2 3 4 5 6 7 8 9

分段故障

fileA.c

void testPointing(int size, int** foo) {
    initialize(size, foo);
    int i;
    for(i = 0; i < size; i++) {
        printf("%d ", (*foo)[i]);
    }
}

fileB.c

void initialize(int size, int** foo) {
    int* a;
    a = (int*)malloc(size * sizeof(int);
    int i;
    for(int i = 0; i < size; i++) {
        printf("%d ", a[i]);
    }
    printf("\n\n");
    foo = &a;
}

我需要帮助来修复和理解为什么会出现分段错误。每当我选择将位于fileA.cafter foo = &a in的循环fileB.c改为时,它都会编译并显示正确的输出。

4

1 回答 1

5

返回的地址malloc()是保存您的数据的地址,它存储在 中a,而不是&a. &a只是局部变量的地址a

此外,foo只是 的本地函数参数initialize(),而不是调用者的传递参数;那是*foo。这使得调用者的未foo设置,这就是你得到分段错误的原因。

所以而不是:

foo = &a;

你需要:

*foo = a;

最初的调用testPointing()应该是这样的:

int* array;
testPointing(size, &array);
于 2012-11-26T07:54:00.067 回答