C多个文件,分段错误打印一个数组



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

size 和 foo 在主文件的另一个函数中初始化。它编译得很好,输出虽然是(如果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("nn");
    foo = &a;
}

我需要帮助修复和理解为什么我遇到分段错误。每当我选择将位于fileA.c的循环放在之后 foo = &a fileB.c 相反,它会编译并显示正确的输出。

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

另外,foo只是initialize()的局部函数参数,而不是调用者的传递参数;这就是*foo。这使得调用方的foo未设置,这就是您遇到分段错误的原因。

所以代替:

foo = &a;

你需要:

*foo = a;

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

int* array;
testPointing(size, &array);

相关内容

  • 没有找到相关文章

最新更新