我有2个文件的代码交互,但是我在这两个函数中遇到了分段错误,我需要帮助找出原因。 fileA.c
将int**
传递给fileB.c
中的函数,int**
作为输出参数,因为我想在fileB
中创建一个int数组并且{ {1}}指向它,以便我可以在foo
中打印出来。在fileA
中,我创建一个数组,并设置指向它的指针。
size和foo在主文件中的另一个函数中初始化。它编译得很好,输出虽然是(如果fileB.c
):
0 1 2 3 4 5 6 7 8 9
分段错误
在size == 10
:
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
,它会编译并显示正确的输出。
答案 0 :(得分:5)
malloc()
返回的地址包含您的数据,并存储在a
,而不是&a
。 &a
只是局部变量a
的地址。
此外,foo
只是initialize()
的本地函数参数,而不是调用者的传递参数;那是*foo
。这使调用者的foo
未设置,这就是您遇到分段错误的原因。
所以而不是:
foo = &a;
你需要:
*foo = a;
对testPointing()
的初始调用应该是这样的:
int* array;
testPointing(size, &array);