C多个文件,分段故障打印一个数组

时间:2012-11-26 07:51:32

标签: c arrays segmentation-fault multiple-files

我有2个文件的代码交互,但是我在这两个函数中遇到了分段错误,我需要帮助找出原因。 fileA.cint**传递给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 ,它会编译并显示正确的输出。

1 个答案:

答案 0 :(得分:5)

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

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

所以而不是:

foo = &a;

你需要:

*foo = a;

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

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