[英]why using sizeof in malloc?
在 IDEONE 上執行此代碼時:
#include <stdio.h>
#include <stdlib.h>
struct A{
int x;
char c;
};
struct B{
int y;
};
int main(void) {
// your code goes here
struct A* pa = malloc(sizeof(struct B));
printf("%d\n",sizeof(*pa));
pa = malloc(sizeof(int));
printf("%d\n",sizeof(*pa));
pa = malloc(sizeof(char));
printf("%d\n",sizeof(*pa));
pa = malloc(0);
printf("%d\n",sizeof(*pa));
return 0;
}
我有:
8
8
8
8
我猜因為pa
的類型是struct A *
並且struct A
長度是 8 個字節,那么 malloc 應該分配 8 個字節,但如果是這樣,為什么要使用 sizeof?
sizeof
不返回分配的內存塊的大小(C 沒有標准方法來獲取該信息); 它根據操作數的類型返回操作數的大小。 由於您的指針的類型為struct A*
,因此 sizeof 操作數的類型為struct A
,因此 sizeof 始終返回 8。
因此,即使您為 10000 字節的結構分配了 1 個字節,您仍然會看到sizeof
返回 10000。
如果您沒有為該對象分配足夠的內存(例如,因為 sizeof(int) < sizeof(struct A))但您無論如何都嘗試使用該對象,您將遇到未定義的行為 - 您的程序不再明確定義和任何東西可能發生(什么也沒有、崩潰、內存損壞、黑客擁有您的計算機)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.