指向struct access violation写入位置的指针

时间:2014-11-09 15:30:06

标签: c++ c pointers struct access-violation

好的,我有这个问题:

Unhandled exception at 0x00261A46 in CompGeometry.exe: 0xC0000005: Access violation writing location 0xCDCDCDED.
First-chance exception at 0x00261A46 in CompGeometry.exe: 0xC0000005: Access violation writing location 0xCDCDCDED.

这发生在使用调试器的这行代码中:

edges.tail->next->a = newEdge->a;

这是此特定部分的所有代码:

    /* non-empty list -- add it */
    if (edges.head != NULL) 
    {   
       printf("1 %d, %d\n", newEdge->a.x, newEdge->a.y);
       printf("2 %d, %d\n", newEdge->b.x, newEdge->b.y);

       //edges.tail->next = new hull::EDGE;

       edges.tail->next->a = newEdge->a;
       edges.tail->next->b = newEdge->b;
       newEdge->next = NULL;
       edges.tail->a.x = newEdge->a.x;
       edges.tail->a.y = newEdge->a.y;
       edges.tail->b.x = newEdge->b.x;
       edges.tail->b.y = newEdge->b.y;
    }
    /* empty list -- 1st item */
    else
    { 
       edges.head = newEdge;
       edges.tail = newEdge;
       newEdge->next = NULL;
    }  

这是我的边缘结构和我的边缘结构:

typedef struct line {
    VERTEX a;
    VERTEX b;
    struct line *next;
} EDGE;

struct edges {
    int size;
    EDGE* head;
    EDGE* tail;
};

//all edges of the hull
struct edges edges;

所以,我正在尝试将EDGE添加到名为' edge'的EDGES数组中。

请帮助!

3 个答案:

答案 0 :(得分:1)

问题在于您的

edges.tail->next

你必须确定是否

edges.tail 

edges.tail->next

在访问之前不是NULL。

答案 1 :(得分:1)

在分配包括尾部及其成员在内的变量和成员之前,您需要测试所有变量和成员的有效性。

0xCDCDCD ....是Microsoft运行时未初始化的内存标记。见here

答案 2 :(得分:0)

好的,我明白了,你们是在正确的轨道上分配内存......所以生病给你一点意见。

我需要在添加到tail和tail-> next:

之前执行此操作
    edges.tail = (hull::EDGE*) malloc(sizeof(hull::EDGE));
    edges.tail->next = (hull::EDGE*) malloc(sizeof(hull::EDGE));

感谢。