-
系統分配了自己的記憶體位址,但 p 指向未知位置。
如果您不將其指向正確的位址,那麼在將來使用您的程式時,這是可能的。
有一天,變成字段指標可能會產生嚴重的錯誤,但在您的程式中,它已經是了。
指向 p 到 &i,這是不允許的,但編譯仍然是可以接受的,因為它們不是型別化的。
一致。 因此,當定義指標且不指向位址時,通常指向 null;
你的程式 p 沒有初始化,所以 *p 它根本不知道指向哪裡,是乙個錯誤的指標。
如果將其更改為。 int **p;
int i = 3;
p = &i;
printf("%d", *p);
這相當於使用二級指標作為一級指標!
-
int **p;宣告乙個變數,指標的指標也是乙個變數,這個p,系統會給你分配乙個儲存區域;
但是 p 指向的記憶體是未知的,它可能是空的,它可能是無法訪問的;
例如,p 現在指向0x12345678,而儲存在0x012345678位址中的內容恰好是您無法更改的內容。
例如,如果儲存之前定義的變數值 3,現在使用 *p = &i,即將記憶體位址 0x012345678 的值 3 更改為 i 的位址。
因此,在 p 指向的地方分配乙個空格,或者指向您可以控制的一段記憶體,然後操作它!
-
1.在程式中寫入時仍然是正確的,因為 *p 指向 i 的記憶體位址,所以不會有問題。
2.如果不給 p 賦值,此時因為 p 在棧中,所以 p 的值是隨機值,即 p 會指向乙個不可知的區域,當 p 引用的位址空間大於 2g 時,程式會丟擲異常,直接推出; 如果 p 所指的位址空間小於 2G,但相應的記憶體區域尚未分配,系統也會將其視為非法訪問。 最後,如果幸運的話,p 和 *p 指向乙個合法的記憶體區域,它們會正常工作。
3.在VC下,如果是除錯模式,他會將堆疊初始化為0xcc,如上所述,這是乙個非法位址,所以會退出程式。
-
是乙個危險的程式。
p 是二級指標,即 p 是指向另乙個指標指標變數的指標變數,p 指向指向變數的指標變數。
你的寫法,*p=&a,是將 p 指向 i 的指標變數指向 i,問題出現了:p 指向 **? 也就是說,什麼是*p? 我不知道! 因為你沒有給他分配空間!
-
危險的程式。 p 指向 ** 你不確定,所以 *p = &i;這是為不確定的位址分配乙個值,這當然是危險的。
-
無論作業系統是否可以防止此類記憶體錯誤,最好初始化指標。
事實上,不僅僅是指標,任何變數都應該被初始化。
-
該函式返回指標值的副本,但記憶體位址不會更改。
動態應用堆記憶體,只有使用者手動釋放記憶體,此記憶體為系統恢復,如果使用者不釋放記憶體就會發生洩漏。
程式執行過程中記憶體洩漏,使用者的動態應用記憶體沒有釋放。
程式結束後,系統會自動為應用程式分配資源。
-
你輸出指標 p 的位址,它也占用 4 個記憶體空間,這是有效的記憶體,但如果你這樣做,p 的值是乙個隨機數,即 p 指向乙個未分配的未知空間。
-
char c;&c 是 C 的位址,對吧? 相同的 &p 也是指標 p 的位址。 指標也必須存在於某個位置。
-
p 屬於 char* 型別。 空間已經分配。 只是p的值沒有初始化。
-
好吧,你發現的就是問題所在,這就引出了乙個問題,即當它被釋放時如何處理那段記憶體。
首先,呼叫函式,作業系統為函式分配記憶體空間,並在定義中定義 char a="abccc";然後,作業系統在記憶體中為應用程式分配 6 個位元組的空間來儲存此字串,末尾為 0
離開 GE 函式時,該函式占用的記憶體空間由作業系統(作業系統)釋放。 所謂發布過程,就是電影的連續記憶體空間被os**占用,應用不再使用,但是儲存在記憶體中的內容呢? 它仍然在那裡,它不會被清除,因為如果它要被清除,我們理所當然地認為它將是 0,這會消耗大量的作業系統資源,如果專案非常大,速度會變慢,所以作業系統不負責清除 0。
所以資料仍然會儲存在那裡,你 ge()[2], ge()[3]。您可以依次檢視儲存的字元。
但是為什麼不能整數輸出呢? 因為它是釋放的,所以它不歸你的程式所有,而且你的程式沒有實際的能力來操作那段記憶體,所以它無法處理它。
-
ge() 返回指標 char*
對於某個型別的指標 ptr,可以使用 ptr[i] 獲取從 ptr 開始的 i 型別大小偏移量的第乙個位址。
簡單來說,指標可以像陣列一樣使用,但是程式設計師必須保證i不能越界,這也是C C++的強項,也是非常棘手的地方,容易出錯,不推薦。
-
1.每次動態分配記憶體後必須釋放記憶體,否則將來某個時候會出現記憶體洩漏問題。
2.將字串直接分配給指標實際上是將第乙個位址分配給指標。 指標中儲存的不是字串的內容,而是字串的位址。 當然,字串儲存在與標頭位址相連的記憶體中。
-
這不是輸出字串的格式控制器,字串應為 %s。
str 只是指向字串初始字元的位址,當您輸入超過 2 個字元時,系統會將已經占用的空間分配給它,如果占用的儲存空間不儲存重要資訊,也不會出現問題。 >>>More
派生類可以轉換為基類,因為派生類本身有基類的成員,所以不需要強制轉換,這就是為什麼派生類的指標和引用可以轉換為基類的指標和引用,而基類的指標和引用只能訪問基類的成員, 即型別轉換的向上強制。 >>>More
首先我想解釋一下:陣列名稱是乙個指標,它指向儲存陣列元素的一段記憶體,那麼陣列元素是如何引用的,我給大家舉個例子。 例如,a[3],編譯系統將首先找到陣列的第乙個位址,即a,然後根據中的值確定位址偏移量,即3,從而確定要引用的元素是位址a+3所指向的單元的內容。 >>>More