爲什麼下面的代碼會被編譯和運行。C++訪問靜態數組之外的界限vs新數組?
我已經創建了一個整數數組,並將它的大小賦值爲10
,爲什麼程序不返回一個錯誤,我試圖在for循環內部訪問數組之外的元素?另外,我想了解new的概念,我的用法是否正確(我沒有分配多少內存*數組需要),這是我的理解,new允許我創建一個動態大小的數組(我沒有分配多少內存*數組需要)這意味着我可以在運行時無限期地增加這個數組的大小,如果我錯了,請糾正我)。如果這是正確的,我使用新的或簡單地分配數組[];有什麼區別。因爲這兩個顯然允許我在運行時增加我的數組的大小,這可以看到這個例子。我知道範圍,堆棧和堆的差異,因此假定兩個變量只在main中聲明,並使用下面的代碼作爲示例。
#include <iostream>
using namespace std;
int main()
{
int array[10];
int *arrays;
arrays = new int();
for (int i=0; i<450; i++)
{
arrays[i] = i;
cout << arrays[i] << " ";
array[i] = i;
cout << array[i] << endl;
}
return 0;
}
因爲這不是編譯錯誤,所以它是未定義的行爲。 – 2011-12-15 19:43:03