-4

setColor に 2 番目の呼び出しを追加すると、セグメンテーション違反が発生します。そのメソッドが何らかの形で配列ポインタを変更しているのではないかと思いますが、その理由はわかりません。

#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初期化されていないポインターの配列です。未定義の動作を呼び出したので、あなたは「ラッキー」です。

于 2013-03-07T20:25:36.367 に答える
1

色へのポインターの配列を宣言しましたが、使用するメモリを確保していません。これは未定義の動作です。未定義の動作であるため、何が起こるかはわかりません。使い続ければ、コーヒーが一杯出るかもしれません!

この回答を保持する価値があるようにするために、説明した正確なシナリオは、ワイルドポインターの逆参照と呼ばれます。

于 2013-03-07T20:25:30.500 に答える