全て
動的な2D配列宣言の非常に単純なCコードを記述し、それをで初期化してmemset
から値を出力しています。私のコードは次のようなものです。
float **env;
int i,j,num;
printf("Enter a number : \n");
scanf("%d",&num);
env = (float **)malloc(num*sizeof(float *));
for(i=0;i<num;i++)
{env[i] = (float *)malloc(num*sizeof(float));}
memset(env, 0, sizeof(float)*num*num);
for(i=0;i<num;i++)
{ for (j=0;j<num;j++)
{
printf("%f\t",env[i][j]);
if (j == num -1)
{ printf("\n\n");}
}
}
for(i=0;i<num;i++)
{free(env[i]);
}
free(env);
プログラムをコンパイルするとき、コンパイルエラーや警告はありませんが、値を印刷しようとすると、それらを印刷できません。次に、プログラムをデバッグしました。memset
ステートメントの後にenv 2D変数が次のよう
CXX0030: Error: expression cannot be evaluated
に表示され、値を出力するとウィンドウが表示されます。
Unhandled exception at 0x008b1e27 in ***.exe: 0xC0000005: Access violation reading location 0x00000000.
2 forループを使用して2D配列envを0に明示的に初期化しようとしましたが、これは完全に機能し、値を出力することもできますが、を使用すると機能しませんmemset
。誰かが私を助けてくれるととても助かります。ありがとうございました。