我做了这样的结构:
struct a{
char *name;
char *value;
struct a *next;
};
当我第一次使用malloc进行内存时,没关系,我可以将'name'和'value'设置为相应的值。 但是当我第二次使用malloc时,会出现错误。这是一个cgi,只是告诉我“500内部服务器错误”。
我将指针'name'和'value'更改为数组,一切正常。
我想也许编制者不知道要分配多少内存。
你有什么想法吗?我会感激每一个答案!
答案 0 :(得分:3)
struct a {
char *name;
char *value;
struct a *next;
};
struct a *head = malloc(sizeof *head);
以上为单个struct a
对象分配空间,但它不会初始化struct a
中包含的任何三个指针。特别是,如果您希望name
和value
指向字符串,则需要为这些字符串分配空间:
head->name = malloc(5);
strcpy(head->name, "Fred");
head->value = malloc(8);
strcpy(head->value, "abcdefg";
这是相当简单的。 5
和8
是“神奇数字”;如果更改初始值,则应以一种保持一致的方式指定大小。您应该始终检查malloc()
是否返回空指针(即使您只是使用错误消息终止程序)。
如果你没有初始化name
和value
指向一些分配的内存,你可能仍然可以初始化他们指向的内容(例如,通过在没有strcpy
s的情况下执行malloc
s。更确切地说,系统不一定会诊断错误。
最后,您需要拨打与free()
次呼叫相对应的malloc()
。
请注意,这很大程度上是基于您的描述的猜测。如果您能向我们展示您的实际代码,我们可以为您提供更好的帮助。
答案 1 :(得分:2)
如果将malloc
与sizeof(struct a)
一起使用,它只会分配足够的空间来存储指针的名称和值。您希望这些是char数组,然后它将知道为每个a
实例留出多少空间。