-
位元組。 malloc 應用程式的記憶體是 void 指標型別,所以在應用程式之後,需要將前乙個請求轉換為所需的型別,如您的示例 (u32*) 所示,因此 malloc(8) 是 8 個位元組。
2.第二句話不會錯。 由於您已經在第一句話中申請了 mybuf 的記憶體,因此 mybuf 已經是 8 位元組的 u32* 指標型別。 指標和陣列的使用基本相同,但存在一些差異。
例如,引數有時是不同的。
3. 這超出了陣列邊界。 根據記憶體訪問機制,mybuf[33] 會繼續訪問記憶體外的第 33 個空間,如果空間已經用完,程式就會崩潰。 如果不使用它,你會很幸運,不會崩潰並出現亂碼......
-
1.malloc 中引數的含義是分配的位元組數。
2.在 mybuf[0] 中的作用相當於 * 表示,即 =*(mybuf+1)。
指向不確定的記憶,所以後果是不確定的,它可能是正確的,也可能是崩潰的!
-
1:為 8 個位元組。
2:mybuf 被定義為陣列或指標,在用法上非常相似。 這裡沒有語法問題。
3:這是不可預測的,如果你幸運的話,程式會崩潰。 不幸的是,該程式可以正常工作。
-
看起來你要編寫乙個分配空間的函式 f。
1.識別符號 parr 對應於乙個指標變數,該變數通常為 4 或 8 個位元組。 此變數用於儲存 struct student* 型別的記憶體位址。
2.函式呼叫 f(parrr) 將變數的內容傳遞給 f,即結構 student * 型別的位址。 但是,由於識別符號的作用域,f 不知道此指標變數的記憶體位置,並且它僅對堆疊空間中指標變數的副本進行操作。
在這種情況下,無法通過正常方式修改指標變數 parr 的值。
3.函式呼叫 f(&parr) 將變數的記憶體位址傳遞給 f,f 是 struct student 型別的位址值。 f 使用此位址,您可以操作此位址中的資料以訪問或修改指標變數 parr。
-
"但是為什麼要傳送 f(&parr)?"
這句話從何而來?
-
Free 將報告錯誤。
我的理解是這樣的:當 malloc 分配記憶體時,除了你請求的 1 個位元組外,還有一些管理資訊和乙個指向下乙個分配塊的指標,當你實際使用的空間超過你請求的空間時,指向下乙個分配塊的指標將被破壞,問題可能很嚴重。
-
應為“空閒”提供您請求的記憶體,並且無法檢查額外的記憶體。
-
您可以隨心所欲地申請。
-
C語言中的Malloc是乙個動態記憶體分配函式。
函式原型:void *malloc(unsigned int num bytes);
引數:num bytes 是乙個無符號整數,表示分配的位元組數。
返回值:如果分配成功,它將返回指向已分配記憶體的指標(此儲存中的初始值不確定),否則返回未確定型別的空指標,void * 可以指向任何型別的資料,更具體地說,當您請求記憶體空間而不知道使用者使用此空間儲存的資料型別(例如 char 或 int or.
功能:分配長度為 num 位元組的記憶體塊。
注意:當記憶體不再使用時,應使用 free() 函式釋放記憶體塊。 函式返回的指標必須正確對齊,以便它們可以與任何資料物件一起使用。
關於這個函式的原型,以前 Malloc 返回乙個 char 指標,新的 ANSIC 標準規定這個函式返回乙個 void 指標,所以必要時需要進行型別轉換。
示例:包括""
#include""包含 malloc() 函式。
int main(void)
sprintf(a,"%s","helloworld");//"helloworld"寫入 A 指向的位址。
printf("%s",a);輸出使用者輸入的資料。
free(a);釋放使用的記憶體位址。
return0;示例 2:是否存在記憶體洩漏? }
p 是指標,指標是資料型別,而不是陣列,陣列是資料結構,陣列可以被認為是儲存在“連續儲存空間”中的相同資料型別的資料元素的集合。 >>>More
沒有成員方法,但在 VC++ 的結構中,寫控制項,可以檢視 API,尤其是 VC++6,這在 C 語言中是不可用的。 >>>More