分段故障调用方法第二次C ++

时间:2013-03-07 20:23:29

标签: c++ methods fault

如果我添加第二次调用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;
}

2 个答案:

答案 0 :(得分:6)

arr是一个未初始化的指针数组。你很幸运,因为你引用了未定义的行为

答案 1 :(得分:1)

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

为了使这个答案值得保留,您所说明的确切方案称为取消引用wild pointer