代码之家  ›  专栏  ›  技术社区  ›  Vladimir

嵌套列表结构c++

  •  0
  • Vladimir  · 技术社区  · 2 年前

    我有一个嵌套列表:

    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);
    

    VisualStudio说:“解除对空指针'p'的引用”和“访问冲突读取位置0xFFFFFFFFFFFFFF”串起。H

    怎么能修好呢?

    1 回复  |  直到 2 年前
        1
  •  2
  •   wohlstad    2 年前

    这一行:

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

    为对象分配内存 struct Line .

    的确如此 初始化对象。 此对象的未初始化数据成员之一为 CHANNEL* chan . 因此,当你试图访问 p->chan->channel_id , p->chan CHANNEL 结构成员。

    您可以通过“手动”初始化 p 分配之后。

    但是如果你使用的是c++(正如你在问题上的标签所建议的那样),最好使用 new 它在执行内存分配后调用对象的构造函数。要使其工作,您需要向 结构线 这将初始化所有成员(特别是初始化指针,如 chan频道 指一些有效的 频道 对象)。同样在c++中,它通常更喜欢使用智能指针而不是原始指针。