首页 > 解决方案 > 从不同函数访问分配的数组时出现 SegFault

问题描述

我用 C 编码已经一年了,但我不明白为什么这是段错误

// Assume all imports are made

int printAgain(double** array, int size) {

    int i = 0;
    while(i < size) {
        printf("Value: %f\n", *array[i]);
        ++i;
    }

    return 0;
}



int main(int argc, char *argv[]) {

    int size = 10;

    // Want an array of size 10 that contains doubles
    double *array = malloc(size * sizeof(double));

    if(array) {

        int i = 0;
        while(i < size) {

            // Doing irrelavent stuff here

            double value = 1.5; // 1.5 is random # I picked for this example
            array[i] = value;

            printf("Added to array: %f\n", array[i]);
            ++i;
        }

        printAgain(&array, size);

        free(array);
        return 0;
    }
}

第一个打印语句main工作正常,但printAgain它会打印数组的第一个元素,但在尝试打印第二个元素时会出现段错误。

我相信我分配正确,将数组的点分配给 for 循环中的值,然后将数组的地址发送给printAgain函数。在该函数中,我取消引用给定地址以访问数组并打印其内容。我知道当访问越界/非法内存空间时会发生段错误,但我不明白这是怎么发生的,因为我“相信”我正确分配并将地址从 main 传递给数组。

我知道我遗漏了一些非常简单和基本的东西,但我想这就是 1 年不使用语言编码对你造成的影响,对此我深表歉意。

标签: carrayssegmentation-fault

解决方案


mainarray已经是一个指针。你最好使用printAgain(array, size);而不是传递它printAgain(&array, size);。在连接中,您需要将功能装饰从 更改int printAgain(double **array, int size)int printAgain(double *array, int size)

int printAgain(double *array, int size) {
    int i = 0;

    while (i < size) {
        printf("Value: %f\n", array[i]);
        ++i;
    }

    return 0;
}

int main(int argc, char *argv[]) {
    int size = 10;
    double *array = malloc(size * sizeof(double));

    if (array) {
        int i = 0;

        while (i < size) {
            double value = 1.5; // 1.5 is random # I picked for this example
            array[i] = value;
            printf("Added to array: %f\n", array[i]);
            ++i;
        }

        printAgain(array, size);

        free(array);
        return 0;
    }
}

推荐阅读