好的,我有这个问题:
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数组中。
请帮助!
答案 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));
感谢。