今天在群里看到有人寫的一段代碼
struct ?test?
{
????test()?{?puts( " ctor " );?}
???? ~ test()?{?puts( " dtor " );?}
};
int ?main()
{
????delete? new ?test[ 2 ];
}?
運行,當之!
………………
……………………
…………………………
………………………………
delete[] new test[2]; 即可解決
另轉(zhuǎn)貼
C/C++數(shù)組的一個“怪現(xiàn)象”
?
大家對數(shù)組的使用再熟悉不過了吧?
來看下這個程序,挺簡單的。

2

3



4



5

6

7

8

現(xiàn)在請仔細看第6行。
發(fā)現(xiàn)了什么?
試下編譯一下看能不能通過?
把這個程序更加簡化



2

再來看下產(chǎn)生的匯編代碼
4:?????? int a[5] = {1,2,3,4,5};
00401568?? mov???????? dword ptr [ebp-14h],1
0040156F?? mov???????? dword ptr [ebp-10h],2
00401576?? mov???????? dword ptr [ebp-0Ch],3
0040157D?? mov???????? dword ptr [ebp-8],4
00401584?? mov???????? dword ptr [ebp-4],5
5:??????? int b = 1[a];
0040158B?? mov???????? eax,dword ptr [ebp-10h]
0040158E?? mov???????? dword ptr [ebp-18h],eax
你沒有看錯,此刻這個數(shù)組春哥附體,a[1]的指向地址和1[a]是一樣的,都是[ebp-10h]。
Why?
我們回憶一下數(shù)組和指針的關(guān)系,如何用指針來表示數(shù)組?
*a? 就是 數(shù)組 a中下標為0的值的引用,即a[0],
那么*(a+i) 呢?
表示的就應(yīng)該是數(shù)組 a中下標為i的值的引用了,即a[i],
那么這種現(xiàn)象也不足為怪了:
因為 *(a+i) ?== *(i+a)
所以 a[i] == i[a]
是不是感到 啊哈!靈機一動(aha! Insight)了呢?
擴展資料:《C陷阱與缺陷》p33~p38