如果我添加第二次调用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;
}
答案 0 :(得分:6)
arr
是一个未初始化的指针数组。你很幸运,因为你引用了未定义的行为。
答案 1 :(得分:1)
你已经声明了一个指向颜色的指针数组,但没有留出任何内存供它使用。这是未定义的行为。作为未定义的行为,你不能说会发生什么。如果你一直在运行它,你可能会从中取出一杯咖啡!
为了使这个答案值得保留,您所说明的确切方案称为取消引用wild pointer。