【发布时间】:2013-03-07 20:23:28
【问题描述】:
如果我向 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;
}
【问题讨论】:
-
你可能想要一些实际的对象在那些不确定的指针后面。
-
为什么有这么多指针?所有那些尖尖的星星都刺痛了我的眼睛。
-
您正在为 Color*(在 arr 中)而不是目标 Color 对象分配内存。我很惊讶这甚至可以工作一次。
-
您必须先分配一个变量值,然后才能使用该值。您创建了一个名为
arr[0]的变量,它没有特定的值,然后您尝试通过取消引用来使用该值。不好。 -
这三个指针指向任何地方。通过它们访问数据将导致未定义的行为。