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

标签 c arrays segmentation-fault

我有此代码与 2 个文件交互,但我在这两个函数中遇到段错误,我需要帮助找出原因。 fileA.cint** 传递给 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/

相关文章:

CC65 : Four lines bad, 两行好吗?

java - 如何检测一个元素是否是数组中的最后一个元素?

c++ - 获取指向容器末尾的原始指针

将文本文件中的字符串转换为数字

c - 从 fgets() 输入中删除尾随换行符

C字符串连接问题函数

c# - 如何在 C# 中创建与键 (userID) 配对的固定长度字符串数组(聊天消息)

arrays - 具有三个条件的索引/匹配

c - 在代码中出现奇怪的段错误

segmentation-fault - 尝试使用 Composer 安装 Drush 时出现段错误