在以下代码中:
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
- 如果我只分配 10,索引号为 15 的元素怎么可能存在?
- 为什么整个数组被释放后指针仍然有值?
我尝试使用这样的单一分配删除:
int * ptr;
ptr = 0;
ptr = new int;
*ptr = 5;
cout << *ptr << endl;
delete ptr ;
cout << *ptr << endl;
结果正常:
5 0
在 fedora 17 和另一个平台(SLC5 - red hat based linux)上使用 gcc 4.7.2 和 gcc 4.1.2 进行了测试,以确保它不依赖于编译器。我在这里做错了什么?