繁体   English   中英

C动态内存分配如何工作

[英]C How does Dynamic Memory allocation work

我发现以下示例:

typedef struct {
    char * name;
    char age;
} person;

person * myperson = malloc(sizeof(person));

myperson->name = "John";
myperson->age = 27;

http://www.learn-c.org/en/Dynamic_allocation

我认为我在示例中分配了8个字节(sizeof(person))。 所以我认为当我给myperson-> name分配“ justatestfoobar”时,我就炸毁了程序。

有人可以解释为什么以及如何运作吗?

当你写

 person * myperson = malloc(sizeof(person));

它为myperson变量(指针)分配内存,即为myperson->namemyperson->age成员变量本身分配内存。

直到时间,由myperson->name (作为指针)指向的内存位置才有效。 换句话说, myperson->name本身是有效的访问,但是当您尝试使用myperson->name指向的内存位置的内容时,它将成为UB,因为指针值是不确定的。 您需要为指针单独分配内存。

跟随那个,

 myperson->name = "John";

是有效的,因为您要将字符串文字 "John"的起始地址存储到指针。 之后,您可以使用指针内容。 (请记住,由于myperson->name指向字符串文字,因此您不能更改它。)

为了扩展这个答案,让我声明一下,如果要将字符串复制 myperson->name指向的内存位置,那么首先需要首先为myperson->name分配内存。 例如,

 myperson->name  = malloc(32);    //allocate memory 
 strcpy(myperson->name, "Hello");  //write to that memory

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM