嵌套列表结构 C++

nested list struct c++

我有一个嵌套列表:

struct CHANNEL {
char channel_id[200];
char name_Channel[200];
};

struct Line {
CHANNEL* chan;
PROGRAM* prog;
HOST* host;
DATE_TIME* date;
struct Line* next;
};

但是当我创建一个 Line 变量并尝试使用它时

    char number[200];
    Line* p;
    p = (struct Line*)malloc(sizeof(*p));

    strcpy_s(p->chan->channel_id, number);

Visual studio 表示:“取消引用 NULL 指针 'p'”和“访问冲突读取位置 0xFFFFFFFFFFFFFFFF。”在 string.h

如何修复?

这一行:

p = (struct Line*)malloc(sizeof(*p));

struct Line的对象分配内存。

初始化对象。 此对象的未初始化数据成员之一是 CHANNEL* chan。 因此,当您尝试访问 p->chan->channel_id 时,p->chan 未初始化,您不能使用它来访问 CHANNEL 结构成员。

您可以通过在分配后“手动”初始化 p 的成员来解决这个特定问题。

但是,如果您使用的是 c++(正如您在问题中添加的标签所建议的那样),最好使用 new,它会在执行内存分配后调用对象的构造函数。为此,您需要向 struct Line 添加一个构造函数,它将初始化所有成员(并专门初始化指针,如 CHANNEL* chan 以指向某个有效的 CHANNEL 对象)。同样在 c++ 中,通常更喜欢使用智能指针而不是原始指针。