ここ数年、純粋な C を使用していませんが、この本当に基本的な使用例を機能させることができないようです。これは単純な C での単純な使用例です。実際の状況は HDF ライブラリにラップされていますが、まずこれから始める必要があります。
#include <stdio.h>
void print_data(float **data, int I, int J)
{
for(int i=0;i<I;i++)
{
for(int j=0;j<J;j++)
printf("%02.2f\t", data[i][j]);
printf("\n");
}
}
void initialize_data(float **data, int I, int J)
{
for(int i=0;i<I;i++)
for(int j=0;j<J;j++)
data[i][j] = i * 6 + j + 1;
}
int main(int argc, char *argv[])
{
float data[4][6];
int I=4;
int J=6;
initialize_data((float **)data, 4,6);
print_data((float **)data, 4, 6);
return 0;
}
上記のプログラムは失敗を引き起こし、EXC_BAD_ACCESS シグナルを発生させます。GDB 出力:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5fc0131a
0x0000000100000de6 in initialize_data (data=0x7fff5fbff348, I=4, J=6) at simple.c:16
16 data[i][j] = i * 6 + j + 1;
私はこれが本当にばかげた単純であることを知っていますが、私はこの単純なことを理解しようとして頭がいっぱいです。誰かが私を正しい方向に向けることができますか?