我有这个代码与 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);