【问题标题】:C realloc segmentation faultC realloc 分段错误
【发布时间】:2014-09-22 04:17:27
【问题描述】:

我有一段非常简单的 C 代码,它使用 malloc 和 realloc,但如果我更改属于第一个数组的一部分的值,它会引发 seg 错误。

#include <stdlib.h>

void increase(int** array) 
{
    int * new_array;
    new_array = realloc(*array, 10 * sizeof(int));
    if (new_array != NULL) {
        *array = new_array;
    }
    else {
        // Error in reallocation
    }
    int i = 3;
    *array[i] = 2; // Seg fault if i = 0, 1, 2, 3
}

main()
{
    int *array = malloc(4 * sizeof(int));
    increase(&array);
    free(array);
}

我对指针的理解有问题吗?谁能解释发生了什么以及如何正确使用 realloc?

非常感谢!

【问题讨论】:

    标签: c segmentation-fault malloc realloc


    【解决方案1】:

    你可能需要:

    (*array)[i] = 2;
    

    [] 运算符绑定在 * 之前,因此您的版本执行 *(array[i]),这是错误的。

    【讨论】:

    • 是的,可以的,谢谢。你能解释一下为什么需要这样做吗?
    • 运算符优先级 - 数组索引在指针取消引用之前发生,但您希望反过来。
    • 提供更多细节。之前没有()的版本被解释为*(array[i])
    • 你拯救了我的一天……在我昨天晚上迷路之后。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2015-02-20
    • 2021-07-19
    相关资源
    最近更新 更多