次のコードでは:
int main(int argc,char * argv[]){
int * ptr;
ptr = 0; // tried also with NULL , nothing changes
ptr = new int[10]; // allocating 10 integers
ptr[2] = 5;
ptr[15] = 15; // this should cause error (seg fault) - but it doesn't
cout << ptr[2] << endl;
cout << ptr[15] << endl; // no error here
delete [] ptr;
cout << ptr[2] << endl; // prints the value 5
cout << ptr[15] << endl; // prints the value 15
}
実行結果は次のとおりです。
5 15 5 15
- インデックス番号が 15 の要素が存在する可能性があるのは、10 個しか割り当てていない場合です。
- 配列全体の割り当てが解除された後もポインターに値が残っているのはなぜですか?
次のような単一の割り当てで削除を試みました:
int * ptr;
ptr = 0;
ptr = new int;
*ptr = 5;
cout << *ptr << endl;
delete ptr ;
cout << *ptr << endl;
結果は正常です。
5 0
コンパイラに依存しないことを確認するために、fedora 17 および別のプラットフォーム (SLC5 - Red Hat ベースの Linux) で gcc 4.7.2 および gcc 4.1.2 を使用してテストされています。ここで何が間違っていますか?