我有这行代码:
conf->table = malloc(sizeof(struct Categorie)*(csv_nbLines(filename)));
在free()
上调用conf
时导致错误,因为struct Categorie
包含一个字符串(数组char
s)。
我通过将sizeof(struct Categorie)
替换为30
来修复错误,因为我知道所说的字符串不会超过30个字节。
这可以接受吗?如果不是malloc
所需的确切内存量的更好方法是什么?
编辑:
struct Categorie {
char *name;
char c;
};
EDIT2 :
我最终得到了它并且它完美地运作(这些名字不言自明)。
conf_init()
中的
conf->table = malloc(sizeof(struct Categorie))
<{1>} conf_load()
其中pch
是strtok()
返回的字符串
conf->table[i].name = malloc(sizeof(char)*strlen(pch));
conf->table[i].name = pch;
我希望这对下一个有足够的解释:)
答案 0 :(得分:4)
我害怕,不。
假设你提到的字符串是
的形式struct Categorie
{
.
.
char * str;
}
你应该malloc()
conf->table
sizeof(struct Categorie)
的{{1}},malloc()
的{{1}}。
更不用说,conf->table->str
也需要,在完全相反的分配中,即,首先你需要释放free()
然后conf->table->str
。
答案 1 :(得分:1)
答案:不。这是不可接受的。
您需要提供更多代码才能了解正在发生的事情,但假设conf->table
为struct Categorie *
则会出现非常糟糕的情况。
如果那不是那种类型,那么你不清楚为什么你认为sizeof(struct Categorie)
可能是答案。