1. 程式人生 > >一個指標越界引發的異常

一個指標越界引發的異常

最近寫點加密的東西,接觸了一點c++,沒想到一個簡單的程式碼搞了兩天,無力吐槽!
程式碼如下:

 u_char *p = new u_char[20]();
 u_char *p2= new u_char[20]();
encryption((u_char*)testString.c_str(), p, 5, key, iv);
//+++++++++++++++++++程式碼出錯的地方++++++++
BYTE * dst = new BYTE[50]();
Bytes2HexStr((BYTE*)p, 16, dst);
//+++++++++++++++++++++++++++
std::cout<<"hello: " <<dst<< std::endl;
decryptArray(p, p2, 16, key, iv);

除錯的時候在decryptArray裡面出錯, 錯誤是:***Project1.exe 已觸發了一個斷點***。再具體一點是malloc的地方出錯了,原因是堆已損壞。我感到莫名其妙,encryption和decryptArray程式碼幾乎一摸一樣,為何前面沒有出錯?
查了許多資料,後來看到一個論壇上說有可能前面程式碼分配記憶體時已經出錯了,可能越界了。我一查, 果然

 BYTE * dst = new BYTE[50]();

這段程式碼是我抄的別人的,沒想到裡面多佔了記憶體,於是改了下就沒問題了。
c++ 好難啊;}