嵌套列表结构 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++ 中,通常更喜欢使用智能指针而不是原始指针。
我有一个嵌套列表:
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++ 中,通常更喜欢使用智能指针而不是原始指针。