這裏是我的代碼C++中的動態分配不檢查數組邊界?
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int* arr = new(nothrow)int [100];
int i;
if(arr == 0){//heap is full or dynamic allocation fails
cout<<"Cannot allocate memory\n";
return 0;
}
ofstream file("myFile.bin",ios::out|ios::binary);//opening the file in binary mode
for(i = 0;i<100;++i){//dynamic array which contains numbers form 0 to99
arr[i] = i;
}
if(file.is_open()){
if(file.good())
file.write((char*)arr,400);
delete [] arr;
file.close();
}
ifstream file1("myFile.bin",ios::in|ios::binary|ios::ate);
ifstream::pos_type size;
char* buff;
if(file1.is_open()){
size = file1.tellg();
buff = new char[size];
file1.seekg(0);
if(file1.good())
file1.read(buff,size);
file1.close();
for(i=0;i<size;i= i+4){//gcc => sizeof(int) is 4
cout<<(int)*(buff+i)<<" ";
}
delete [] buff;
}
}
這裏我只分配了100個字節,我從0-99 .IE存儲整數。 400字節(gcc)。 我正在訪問未分配的內存。未發生分段錯誤。 爲什麼會這樣。
輸出是0 1 2 3 .... 99
只是幸運。其實,只是回來運氣。 – pmr 2012-02-20 15:38:03
「這裏我只分配了100個字節」。這是哪裏」?我看到兩個'new'表達式,'new(nothrow)int [100];'和'buff = new char [size];'。你認爲哪一個是100字節? – 2012-02-20 15:45:55
第一個類型int..already得到了答案:) – 2012-02-20 16:31:37