第二次分割故障调用方法c++

Segmentaion fault calling method the second time C++

本文关键字:方法 c++ 调用 故障 分割 第二次      更新时间:2023-10-16

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

arr是未初始化的指针数组。你很"幸运"它能工作,因为你调用了未定义行为

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

为了使这个答案值得保留,您所演示的确切场景称为对一个野指针解引用。