malloc in c,struct

时间:2011-12-14 01:39:44

标签: c struct malloc

我做了这样的结构:

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

当我第一次使用malloc进行内存时,没关系,我可以将'name'和'value'设置为相应的值。 但是当我第二次使用malloc时,会出现错误。这是一个cgi,只是告诉我“500内部服务器错误”。

我将指针'name'和'value'更改为数组,一切正常。

我想也许编制者不知道要分配多少内存。

你有什么想法吗?我会感激每一个答案!

2 个答案:

答案 0 :(得分:3)

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

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

以上为单个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 s。更确切地说,系统不一定会诊断错误。

最后,您需要拨打与free()次呼叫相对应的malloc()

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

答案 1 :(得分:2)

如果将mallocsizeof(struct a)一起使用,它只会分配足够的空间来存储指针的名称和值。您希望这些是char数组,然后它将知道为每个a实例留出多少空间。