繁体   English   中英

c中的malloc,结构

[英]malloc in c, struct

我做了这样的结构:

struct a{
  char *name;
  char *value;
  struct a *next;
};

第一次为内存分配内存时,可以,可以将“名称”和“值”设置为对应的值。 但是当我第二次malloc时,就会出现错误。 而且这是一个cgi,请向我显示“ 500 Internal server error”。

我将指针“名称”和“值”更改为数组,一切正常。

我以为编译器可能不知道要分配多少内存。

您对此有何想法? 我将不胜感激!

struct a {
    char *name;
    char *value;
    struct a *next;
};

struct a *head = malloc(sizeof *head);

上面为一个对象的单个struct a分配了空间,但是它没有初始化struct a包含的三个指针中的任何struct a 特别是,如果您希望namevalue指向字符串,则需要为这些字符串分配空间:

head->name = malloc(5);
strcpy(head->name, "Fred");
head->value = malloc(8);
strcpy(head->value, "abcdefg";

这大大简化了。 58是“幻数”; 您应该以更改初始值时保持一致的方式指定大小。 而且,您应该始终检查malloc()是否返回空指针(即使您只是通过错误消息终止程序)。

如果你没有初始化namevalue以指向分配的内存块一些,你仍可以初始化它们指向什么(例如,通过执行strcpy S上方没有malloc或多个)。 更准确地说,系统不一定诊断错误。

最后,您需要调用与每个malloc()调用相对应的free()

请注意,这很大程度上取决于您的描述。 如果您可以向我们展示您的实际代码,我们可以为您提供更好的帮助。

如果将mallocsizeof(struct a)则将分配足够的空间来存储指针的名称和值。 你想这些是字符数组,然后它会知道多少空间预留为每个实例a

暂无
暂无

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

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