在C ++中显示访问冲突时出错

时间:2015-06-14 16:59:29

标签: c++ struct malloc

struct root
{
    struct Qgroup
    {
        struct Qpost
        {
            struct Qcomment
            {
                struct Qcomment *next;
                int likes;
                int address;
            } QComment[100];
            int likes;
            int comments;
            int address;
        } QPost[100];
        int address;
        int posts;
        int users;
    }QGroup[8];
}*Root = (struct root *)malloc(sizeof(struct root *));

在以下行获取访问冲突错误。

for(int i=0;i<5;i++)
Root->QGroup[i].address = i*128+1024*1024;

请帮我解决这个问题? 我尝试了静态分配和动态分配,但两者都无法读取上面循环中给出的数据。 此错误来自main()

之后的执行开始

2 个答案:

答案 0 :(得分:1)

你的问题是内存分配:

malloc(sizeof(struct root *));

为指针分配内存,在大多数现代系统上只有4或8个字节。

我真的不需要在这里首先使用指针。

答案 1 :(得分:1)

Root = malloc(sizeof(struct root *));

这必须纠正如下:

Root = (struct root *)malloc(sizeof(struct root ));

无需转换为struct root *,因为malloc返回一个void指针,你可以将它指定给C中的任何其他类型。但是在C ++的情况下,你需要像你一样进行转换。

对于C ++,最好使用newdelete代替mallocfree。  所以你可以简单地使用如下:

 Root = new root ;