動的に作成された配列のサイズを小さくするのに問題があります。私のmain
関数は次のようになります。
int main(void) {
// Intialize big array
int * a = (int *)malloc(10*sizeof(int));
assert(a);
// Fill it with squares
for (int i = 0; i < 10; ++i)
a[i] = i*i;
// Expected to print 64
printf("%d\n", a[8]);
// Shrink the big array
int * b = (int *)realloc(a, 5*sizeof(int));
assert(b);
// Expected to cause SEGFAULT
printf("%d\n", b[8]);
return 0;
}
printf("%d\n", b[8]);
行を除いてすべて64
正常に動作しますが、期待どおりに SEGFAULT エラーは発生しません。なんで?
でメモリを縮小することに関連するSOの質問をたくさん見たので、単純なものが欠けていると思いますがrealloc
、それらはすべて可能だと言っています。
GCC 4.8.2でUbuntu 14.04を使用し、-std=c99
オプションでコンパイルしています。