0

ダブルポインターを返すことになっている関数があります。この例では文字配列であるデータへのポインターのアドレスを返すことになっています

元のデータはコンストラクターのパラメーターとして送信されます

Classname::Classname(void* fdata);

次に、frame_data と呼ばれる void* データ メンバにコピーされます。

frame_data = fdata;

ダブルポインターを返す関数は次のように定義されます。

void** Classname::data(){
    return &frame_data;
}

最後に、後で data() を呼び出す関数

std::sprintf(*(char**)classn.data(), "LOOP No: %d", loop);

そして、これがプログラムのセグメンテーション違反です。明らかに何かが間違っていますが、問題がどこにあるのかわかりません。このプログラムでは、data() が二重ポインターを返すという事実と同様に、sprintf 行は変更できません。 ?

4

0 に答える 0