-4

如果我向 setColor 添加第二个调用,则会出现分段错误。我认为也许该方法正在以某种方式更改数组指针,但我不确定为什么。

#include <iostream>

using namespace std;

struct Color {
    int red;
    int blue;
    int green;
};

void setColor(Color **arr, int index, int red, int blue, int green) {
    Color *ptr = arr[index];
    (*ptr).red = red;
    (*ptr).blue = blue;
    (*ptr).green = green;
}

int main() { 
    Color *arr[3];
    setColor(arr, 0, 12, 23, 34);

    return 0;
}
4

2 回答 2

6

arr是一个未初始化的指针数组。你很“幸运”它完全有效,因为你调用了undefined behavior

于 2013-03-07T20:25:36.367 回答
1

您已经声明了一个指向颜色的指针数组,但没有留出任何内存供它使用。这是未定义的行为。作为未定义的行为,你不能说会发生什么。如果你继续运行它,你可能会从中得到一杯咖啡!

为了使这个答案值得保留,您所说明的确切场景称为取消引用野指针

于 2013-03-07T20:25:30.500 回答