#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *arr = (int*)malloc(10);
int i;
for(i=0;i<100;i++)
{
arr[i]=i;
printf("%d", arr[i]);
}
return 0;
}
私は上記のプログラムを実行しており、malloc を呼び出すと 10 バイトのメモリが割り当てられます。各 int 変数は 2 バイトを使用するため、ある意味で、それぞれ 2 バイトの 5 つの int 変数を格納できるため、動的に割り当てた合計 10 バイトを構成できます。 .
しかし、for-loop を呼び出すと、99 番目のインデックスまで値を入力でき、これらすべての値も格納できます。つまり、100 個の int 値を格納している場合、200 バイトのメモリを意味しますが、10 バイトしか割り当てませんでした。
では、このコードのどこに欠陥があるのでしょうか、それとも malloc はどのように動作するのでしょうか? malloc の動作がこのように非決定論的である場合、どうすれば適切な動的メモリ処理を実現できるでしょうか?