簡體   English   中英

檢查 malloc/calloc 的分配

[英]Checking Allocation Of malloc/calloc

每次使用 malloc/calloc 后檢查地址是否為 asagin 似乎是一個很好的編程實踐。

是否可以創建一個函數來檢查分配是否成功? 當我們轉換時,我們每次都轉換點的類型,所以函數不會知道它是哪種指針類型。

例如:

newUser -> name = (char*)malloc(NAME_LENGTH*sizeof(char));
    if (newUser -> name == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    } 

User *newUser = (User*)malloc(sizeof(User));
    if(newUser == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    }

是否可以創建一個函數來獲取 newUser 和 newUser -> name 並在分配失敗時退出?

首先, 不要malloc的返回值,因為它可以隱藏其他錯誤。

malloc包裝在一個可以為您進行空檢查的函數中沒有問題。 由於malloc需要一個size_t並返回一個void *你的包裝函數應該做同樣的事情。 例如:

void *safe_malloc(size_t s)
{
    void *p = malloc(s);
    if (!p) {
        perror("malloc failed");
        exit(1);
    }
    return p;
}

然后,您可以在任何使用malloc地方使用此函數,而無需顯式執行 NULL 檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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