指標變動引起程式崩潰
《程式設計師面試寶典》上的第七章面試例題9:
下列程式會在哪一行崩潰?
structS { //1
inti; //2
int *p; //3
}; //4
main() //5
{ //6
S s; //7
int*p =&s.i; //8
p[0]=4; //9
p[1]=3; //10
s.p=p; //11
s.p[1]=1; //12
s.p[0]=2; //13
} //14
答案是會在第13行崩潰。
程式從第8行開始看起,首先程式把s.i的地址給了p,即此時指標p指向機構s中的第一個元素i。
第9行中,p[0]==*p==s.i。即在結構中i所在的地址內放入整形常量4。
第10行中,p[1]==*(p+1)==p,即在結構s中p所在的地址上放入常量3。
第11行,s.p=p,把p的地址放到s.p上,此時結構s中p所在的地址上放入的是一個指標p。由第9行知道指標p指向s結構中的i,即此時s.p記憶體放的是s.i的地址。
第12行,s.p[1]==*(s.p+1),此時s.p為s.p內所存的值,即第11行賦值的p,也就是&s.i,則這句話實際上就是給以s.p命名的地址空間賦值為1.
第13行,sp[0]==*sp,注意第12行中的程式更改了sp的值,也就是說現在的sp[0]和第13行中的sp[1]已經不是一個數列了(數列的頭指標變化了),此時的s.p為1,即該程式相當於給地址0X0001空間賦值為2,對一個未做宣告的地址直接進行訪問當然會引發錯誤。
總結:在這道題上糾結了很長時間,最後想明白了,其實這是一道非常簡單的題,讀程式時要時刻分清指標指向的值和指標的值的關係。相關推薦
指標變動引起程式崩潰
《程式設計師面試寶典》上的第七章面試例題9: 下列程式會在哪一行崩潰? structS { //1 int
C語言除錯記憶體訪問出錯而引起的程式崩潰問題
在寫程式碼的時候,經常碰到由於記憶體訪問出錯而導致程式崩潰。當代碼量比較多的時候,根本不知道程式錯在哪裡,只能不斷猜測程式碼出錯的地方,將其註釋掉還會不會出現程式崩潰,這種方法雖然最後也能找到問題所在,但是會耗費大量時間。 linux下除錯通常會生成core d
將NULL指標賦值給std::string變數導致程式崩潰
如題:如上圖,但是我們還會經常寫這樣的程式碼,例如我的flamingo中有程式碼如下(已經修正):位於queryresult.cpp中如果fields[i].name為NULL的話,程式將崩潰。備忘一下
指標引起的崩潰分析
指標引起的崩潰問題,常見的原因如下: 指標未判空 勞資還沒幹貨呢,你就讓勞資幹活了。 這種情況實際專案當中是非常多的,即使你用了智慧指標,也還是無法避免。當工程很龐大複雜而且一個類都有可能多個人負責的時候,那麼這個指標的訪問堆疊確實千變萬化,你無法確定
格式化輸出引起的程式崩潰
伺服器上的程式跑一段時間以後,程序就不存在了。放開core檔案限制:ulimit -c unlimited等待產生core檔案分析core檔案(gdb) bt#0 0x008711d3 in strlen () from /lib/libc.so.6#1 0x00840
Android完美解決獲取Dialog中EditText輸入值空指標程式崩潰問題
//在Activity中寫法的關鍵程式碼: final View dialog_view = getLayoutInflater().inflate(R.layout.item_dialog_boo
“Too many connections”引起MySQL崩潰並啟動失敗
using socket tail lob loaded emd 登錄 報錯 conf 問題描述: 在部署一套新環境的時候,rancher-server上有14個鏡像包一起升級,主要是微服務的寫入和查詢程序,基本上都是需要去連接MySQL的程序。可能是由於大並發連接數據庫,
使用ReadFile程式崩潰的原因
在使用這個函式的時候,很多人都不會特意的去看MSDN文件後面的Remarks解釋,所以可能有時候會出問題,而且不知道出在哪裡。 這個函式的其它引數就不詳細解釋了,就說說lpNumberOfBytesRead這個引數。 MSDN原文:When a read operation reac
python CTP 8193 心跳超時程式崩潰解決方法——8193錯誤
終於,終於,終於!!!! 博主千辛萬苦把CTP 8193心跳超時導致程式崩潰的問題解決了!!!!!經歷了一天一夜的測試後,第二天親眼看到CTP返回了8193錯誤後,我的程式沒有崩潰!第二天早上9:00一到,又自己正常運行了。敲開心~~~ 博主的血淚史,就是搜遍國內外全網,不止博主一個人遇到8
C++程式崩潰解決方案
C++程式崩潰解決方案 如需轉載請標明出處:http://blog.csdn.net/itas109 QQ技術交流群:129518033 目錄 文章目錄 C++程式崩潰解決方案 @[toc] 前言
隱藏未知程式崩潰
原文:https://blog.csdn.net/ren65432/article/details/45395461 windows提供了一個如下函式: LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter
iOS Xcode常見的幾種程式崩潰
導讀:記錄了常見的幾種程式程式碼崩潰的原因及解決方法。 1、報錯資訊 *** Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objec
關於QT在開啟子視窗時程式崩潰的其中一個原因分析
其實這個問題當時是糾結了我很長的一段時間,這段時間裡面,我一直在網上面找相關的資料但是卻沒有有用的資訊。 但是在後面的一個機緣巧合之下,我通過函式執行順序來Debug,慢慢的發現問題出現在什麼地方了。現在來總結一下這個問題吧。 其實我現在的經驗覺得,對於QT裡面(由於QT是基於C++的),不
空指標解引用會崩潰
- (BOOL)doSomeThing:(NSError **)err { *err = [NSErrorerrorWithDomain:@"123"code:101userInfo:nil]; returnYES; } 如
Android 應用程式崩潰日誌捕捉
程式崩潰是應用迭代中不可避免的問題,即使有著5年或者10年經驗的程式猿也無法完全保證自己的程式碼沒有任何的bug導致崩潰,現在有一些第三方平臺可以幫助我們蒐集應用程式的崩潰,比如友盟,詳情如下圖 雖然能夠看到崩潰的日誌以及機型等,但還是不是很方便,如果需要精確定位的話需要使用者提供崩潰的時間點、機型
close掉一個失效的MySQL連線導致的程式崩潰
這在沒有連結池控制的應用中十分常見,而我正好在做和MySQL相關的開發工作,在一般的工具類應用中,並沒有使用連結池進行連線的管理,而是直接使用MySQL提供的C API進行操作。而這給我的程式帶來過很多麻煩 比如程式碼如下 int main() { MYSQL *conn
利用MapFile定位程式崩潰(報紅牌)時的程式碼位置
原文:http://www.codeproject.com/KB/debug/mapfile.aspx 1、生成MapFile Project—Setting—C+±—DebugInfo,選擇Line Numbers Only Project—Setting—Link—選擇Generat
windows程式崩潰時自動生成dump檔案方法
/****************第一步新增createdump.h********************************* 新增一個頭檔案:createdump.h #pragma once #include <windows.h> #inclu
關於初始化順序表,程式崩潰問題
下面程式是錯誤程式 /**********************************************************、 ** 檔案: MergeSeqList.c **問題描述:利用順序儲存實現線性表的功能 ** 2、已有兩個升序排列順序表A
Winows下程式崩潰自動建立Dump檔案以方便跟蹤問題
首先定義一個預設的異常處理回撥函式: LONG CrashHandler(struct_EXCEPTION_POINTERS* pExceptionInfo) { std::string dumpFileName = "./CrashDump.dump"; H