這是我在這個論壇的第一個問題,對不起我的英文不好。 我有一個關於C++中的指針和動態內存的問題。用動態內存C++移動指針
實施例,這樣的代碼:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int *a = new int;
for (int i = 0; i < 5; i++)
cout << a++ << endl;
return 0;
}
輸出:
0x11d4c20
0x11d4c24
0x11d4c28
0x11d4c2c
0x11d4c30
我的問題,是我爲什麼可以移動內存大於我與new
創建的 '單' 塊以上。
- 什麼是
a
指向?
發生同樣與new int[]
,即使我具體尺寸:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int *a = new int[2];
for (int i = 0; i < 5; i++)
cout << a++ << endl;
return 0;
}
輸出:
0x2518c20
0x2518c24
0x2518c28
0x2518c2c
0x2518c30
再次,發生了什麼?
- 什麼是
a
指向?
這是否意味着我侵犯了記憶?
這是一個指針,所以你可以執行指針算術。對於您是否實際上仍然指向程序員(即:您)上的有效數據,沒有任何檢查。如果你用你的指針移過已分配的內存,你正在調用未定義的行爲(你正在訪問「隨機」數據) – UnholySheep
看看[這個問題](http://stackoverflow.com/questions/4998939/how-does -unary-addition-on-c-pointers-work) – ray
@UnholySheep我明白指針的行爲,所以'a'只是指向「隨機」數據? –