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