适当的malloc bug修复

时间:2015-02-16 11:15:51

标签: c malloc

我有这行代码:

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()其中pchstrtok()

返回的字符串
conf->table[i].name = malloc(sizeof(char)*strlen(pch));
conf->table[i].name = pch;

我希望这对下一个有足够的解释:)

2 个答案:

答案 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->tablestruct Categorie *则会出现非常糟糕的情况。

如果那不是那种类型,那么你不清楚为什么你认为sizeof(struct Categorie)可能是答案。