I 2次元配列上のmallocを行うため、この方法を使用し、私の情報源は http://c-faq.com/aryptr/dynmuldimary.htmlとModify malloc strategy for 2D Array so malloc succeedsです:2D配列のC malloc:なぜセグメンテーションフォルトがないのですか?
int
main(int argc, char *argv[])
{
long **array = NULL;
array = malloc(5 * sizeof(long *));
for (int i = 0; i < 5; i++)
array[i] = malloc(3 * sizeof(long));
array[4][2] = 515;
array[4][3] = 212;
array[4][10000] = 3;
printf("%ld\n", array[4][10000]);
return 0;
}
私の質問は、私はのいずれかの実行でセグメンテーションフォールトを取得しないのはなぜ です戻りの前に最後の3行?それは安全です(フリーの存在を無視して)?
は、通常、OSに依存して、有効なメモリにアクセスしているかどうかをチェックします。 –
C(C++ではなく)を実行している場合、他の型への 'void *'ポインタの省略をおすすめします。特に、 'array =(long **)malloc(5 * sizeof(long *));'を 'array = malloc(5 * sizeof * array);に変更します。 'は、' malloc'に対して正しいサイズを生成します。 (私は 'array [i] = malloc(3 * sizeof ** array);同様にもう1つ呼び出す) –
私自身の境界を越えてアクセスしようとしない限り、安全です? –