链表实现中的C++结构指针



有人能帮我解决这个问题吗(我猜是指针和内存分配问题——在运行时,如果我删除//COMMENTED// cout statement,代码就不起作用。结构数据结构E的两个*in*out虽然以相同的方式处理,但只有*in给了我所需的输出

struct V
{
      int al;
      V *next;
};
struct E
{;
      int id;
      V *in;
      V *out;
};
void init(E *edges, int count)
{
    int i = 0;
    int id = 1;
    while (i < count)
    {
        edges[i].id = id;
        edges[i].out = new V;
        edges[i].out->al = 0;
        edges[i].out->next = NULL;
        edges[i].in = new V;
        edges[i].in->al = 0;
        edges[i].in->next = NULL;
        i++; id++;
    }
    i =0;
    while (i < count)
    {
        cout<<"Edges are:"<<endl;
        cout<<"Edge In "<<i<<" is "<<edges[i].in->al<<endl;
        //cout<<"Edge Out "<<i<<" is "<<edges[i].out->al<<endl;
        i++;
    }
}
int main()
{
       int counter=5;
       E *edges = new E[counter];
       init(edges,counter);
}

参见

edges[i].id = ++i;

您正在更改i,但在以后的语句中继续使用它。这将使您的一些元素未初始化,而其他元素将尝试在数组边界之外进行写入。

编辑:正如重复数据删除器所指出的,这是未定义的行为(UB),甚至在它进入下一个语句之前。不能依赖赋值运算符的左手边和右手边的求值顺序,因此(例如)i++可能发生在edges[i]部分之前。这个问题有一些有用的答案。

此行有一个错误:edges[i].id = ++i;这里,索引1处的数组元素被赋值,而不是索引0处的预期元素。将其更改为:edges[i].id = i+1;,并在while循环结束时递增i

相关内容

  • 没有找到相关文章

最新更新