すでに機能しているコードがありますが、それを拡張しようとしています。
unsigned char **data_ptr;
最初の「配列」にメモリを割り当てます
data_ptr = (unsigned char **)malloc(sizeof(unsigned char **) * no_of_rows);
次に、ループで各行を初期化します
data_ptr[index] = (unsigned char *)malloc(sizeof(unsigned char*), rowsize));
次に、配列のアドレスをライブラリ関数に渡します。行の先頭を渡すだけで問題なく動作します...
LibFunction( info_ptr, &data_ptr[index] ) //OK
しかし、関数がデータの書き込みを開始する行のアドレスを渡す必要があります。これらは両方ともコンパイルされますが、操作に失敗します
LibFunction( info_ptr,(unsigned char **)data_ptr[index] + 1);
また..
LibFunction( info_ptr,(unsigned char **)data_ptr[index][1]);
LibFunction は次の形式です
LibFunction(..., unsigned char **)
行サイズで必要以上のメモリを割り当てているので、配列をオーバーランしているとは思いません。前述したように、行の先頭を渡すとコードは正常に動作しますが、他の要素を渡そうとするとバグが発生します。他に何か問題があるかもしれませんが、構文が正しいかどうかをまず知る必要があります。
動的 2 次元配列の単一要素のアドレスを渡すことに関して、ネット上で他に何も見つかりません。