コードで整数の配列を定義します。
unsigned int tara[1024][3];
unsigned int data[1024][4];
私はそれらを次のように渡すことができるストレージ構造を持っていますvoid*
:
struct storage {
unsigned int (*data)[4];
unsigned int (*tara)[3];
};
これは上記の構造の私の使用法です:
int main() {
unsigned int tara[1024][3];
unsigned int data[1024][4];
storage but_data;
but_data.data = data;
but_data.tara = tara;
tara_button.setCallback(taraButtonCallback, (void*)&but_data); //Some UI class
while(true); //The program
return 0;
}
コールバックでは、これは私がデータにアクセスしようとする方法です:
bool taraButtonCallback(Opencv_Button* but, void* but_data)
{
storage* data_struct = (storage*)but_data;
int max = -5;
int max_value = 0;
cout<<data_struct->data[0][0]<<'\n'; //!!ERROR!!
return true;
}
これは私が得る実行時エラーです:
OpenCV.exeの 0x00394f1c で未処理の例外: 0xC0000005 :アクセス違反の読み取り場所0x00000005。
編集:
問題は、but_data
定義されている場所とは関係ありません! このコールバックは動作します:
bool taraButtonCallback(Opencv_Button* but, void* but_data)
{
storage* data = (storage*)but_data;
set_tara(data->data, data->tara, *data->mat);
*(data->tara_set) = true;
return true;
}
void set_tara(unsigned int data[][4], unsigned int tara[][3], Mat &UI_bot)
{
UI_bot = Scalar(0, 0, 0);
for(int x=0; x<cam_frame_width; x++) {
tara[x][0]=data[x][0];
tara[x][1]=data[x][1];
tara[x][2]=data[x][2];
}
}