【发布时间】:2013-05-04 15:25:25
【问题描述】:
我用 C 编写的程序有问题。确实,它停在e->identifiant=0; 行
代码:
struct Evenement* e=(struct Evenement*)(malloc(sizeof(struct Evenement)));
e->identifiant=0;
与:
struct Evenement{
int identifiant;
char titre[100];
struct Creneau creneau;
char lieu[50];
char description[500];
};
你有什么想法吗?
【问题讨论】:
-
malloc成功了吗?您无需在 C 程序中强制转换返回值。 -
它是如何停止的?您是否遇到分段错误?如果是这样,@CarlNorum 可能是在正确的轨道上,因为 malloc 没有成功。在尝试分配之前,您应该检查
e是否为非零(非 NULL)。 -
确实,在 malloc 之后 e 为 NULL...我不明白为什么... Malloc 写入正确...不是?
-
如果
e是NULL,则说明你的程序“内存不足”,或者你的程序中的其他东西破坏了malloc()使用的控制信息,导致混淆.显示的两行的唯一错误是您在使用之前没有测试malloc()的结果。真正的问题在别处。如果您有可用的valgrind,请使用它。如果没有,请查看是否可用。 -
@undefinedbehaviour:曾几何时,可以在 SO 上创建一个问题和一组答案,以便在此站点上简单地提供信息。格式发生了变化,我认为现在创建这样一个问题和答案并不容易——而且可以说这不是一个更好的变化(尽管这样的问答项目存在合法问题)。因此,如果您拥有或创建了一个针对内存泄漏的非 SO wiki 页面(大概,我们不能将其称为 wikileaks?),那么它可能是此类问题的有用参考点。
标签: c memory-management struct initialization