我有此代码与 2 个文件交互,但我在这两个函数中遇到段错误,我需要帮助找出原因。 fileA.c
将 int**
传递给 fileB.c
中的函数,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("\n\n");
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);
关于C多个文件,打印数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13560679/