簡體   English   中英

用malloc分配內存?

[英]Memory allocation with malloc?

以下是代碼的片段:

int main(void) {

    char sizing[] = "manshcanshcnams cndhan sndhcna snshans";
    char *xyz = malloc(sizeof(char));
    printf("%ld\n",sizeof(xyz));
    xyz = sizing;    // IT SHOULD FAIL HERE
    printf("Fail %s\n",xyz );
    return 0;

}

正如您所看到的那樣,我正在嘗試為xyz分配更多內存,然后它可以容納什么。 但輸出不會失敗。 這是一個未定義的行為嗎?

您不能使用=復制字符串。 xyz = sizing只是修改變量xyz ,使其指向數組sizing ,而不是指向你malloced的內存。

因此,您的內存被泄露但沒有未定義的行為(除了您忘記包含<stdio.h><stdlib.h> )。

您所做的只是告訴指針xyz指向與大小調整相關的內存地址。 沒有理由這會失敗。

我的理解是malloc()不應該失敗,除非它不能分配它所要求的內存量。 但是,當您使用它時,您需要在不再需要它時釋放該內存,否則您的程序將請求越來越多的內存,並且最終請求因為您尚未發布任何內容而失敗。

此外,並非所有非法內存操作都會導致錯誤,例如( 代碼編輯2013-03-08基於Kludas的觀察,即先前版本無法編譯 ):

#include <stdio.h>
#include <string.h>

int main(void)
{
    char myString[4];
    strcpy(myString, "abcdefghijklmnopqrstuvwxyz");  /* This overflows the buffer */
                                                     /* but MIGHT NOT cause an    */
                                                     /* immediate crash!          */
    printf("myString = [%s]\n", myString);
    return 0;
}

這可能或者可能不會觸發錯誤,但它肯定是非法的,因為我將26個字符寫入一個只能容納4個項目的數組(三個字符加上一個終止NULL)。

暫無
暫無

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

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