- 論壇徽章:
- 0
|
char **pName = reinterpret_cast<char**> (&MyName);
pName指向MyName;
*pName = MyName;
這里發(fā)生了一個(gè)嚴(yán)重的問題:pName指向MyName, *pName也指向MyName; Myname內(nèi)存已經(jīng)被改寫為它的地址了。
strcpy(*pName, "haha");
這里把MyName內(nèi)存改寫為haha\0,有一個(gè)小小的溢出錯(cuò)誤----前面只為MyName分配了Tom\0。不過這個(gè)程序太小,往往運(yùn)行到這里不會(huì)COREDUMP。
cout << *pName << endl;
嚴(yán)重錯(cuò)誤!*pName指向哪里?*pName的內(nèi)存實(shí)際內(nèi)容是:'h' 'a' 'h' 'a' '0',換成地址是?這個(gè)結(jié)果嚴(yán)重依賴平臺(tái):
小尾與大尾的CPU產(chǎn)生的指針值不同,32位與64位的指針值更是天差地別。
不出意料,肯定會(huì)在這里CORE DUMP。
cout << MyName << endl; |
|