簡體   English   中英

為什么在 malloc 中使用 sizeof?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM