【问题标题】:C, set a variable in a structure [closed]C,在结构中设置变量[关闭]
【发布时间】: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 写入正确...不是?
  • 如果eNULL,则说明你的程序“内存不足”,或者你的程序中的其他东西破坏了malloc() 使用的控制信息,导致混淆.显示的两行的唯一错误是您在使用之前没有测试malloc() 的结果。真正的问题在别处。如果您有可用的valgrind,请使用它。如果没有,请查看是否可用。
  • @undefinedbehaviour:曾几何时,可以在 SO 上创建一个问题和一组答案,以便在此站点上简单地提供信息。格式发生了变化,我认为现在创建这样一个问题和答案并不容易——而且可以说这不是一个更好的变化(尽管这样的问答项目存在合法问题)。因此,如果您拥有或创建了一个针对内存泄漏的非 SO wiki 页面(大概,我们不能将其称为 wikileaks?),那么它可能是此类问题的有用参考点。

标签: c memory-management struct initialization


【解决方案1】:

我编译并运行了这个:

#include <stdio.h>
#include <stdlib.h>

struct Evenement{
int identifiant;
char titre[100];
char lieu[50];
char description[500];
};

int main()
{
    struct Evenement* e=(struct Evenement*)(malloc(sizeof(struct Evenement)));
    e->identifiant = 0;
    printf("%d", e->identifiant);
    return 0;
}

而且,没有问题。你能告诉我们错误是什么吗?


我删除了struct Creneau creneau; 行,因为没有描述。会不会是问题?

【讨论】:

  • 即使我删除了 struct Creneau creneau;问题依然存在...
  • @user1360503:在您的代码中,问题不在于您显示的行;它在程序的其余部分。您显示的线条只是检测到问题的地方。对于内存损坏问题(很可能是您的问题;另一种情况是您在某处分配了一个巨大的数组,该数组已经耗尽了所有可用内存),问题的原因通常远离检测到问题的位置,即是使它们难以被发现的特征之一。
  • 正如@Jonathan 所说,问题不在于这部分代码。如果您可以将程序中的方法或有问题的东西分开并单独测试它们;您将能够检测到问题出在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多