我尝试用一种新的结构为动态“MapNode” S阵列,但该程序崩溃:指针崩溃的C程序
在0x000C191C在Astar.exe未处理的异常:0000005:访问违反读取位置0xCCCCCCCC。
我调用getConnectedNodesArray函数,该函数调用其他两个函数。 我知道这是某种指针问题。 当我使用数据的副本而不是试图指向MapNode map [] [12]中的现有数据时,它就起作用了。
谢谢。
typedef struct MapNode * MapNodePointer;
typedef struct MapNode{
int x;
int y;
int value;
int traversable;
double f;
double g;
double h;
MapNodePointer parentNode;
}MapNode;
typedef struct MapNodesArray{
MapNode* nodes;
int size;
}MapNodesArray;
void addNodeToEnd(MapNodesArray* arr, MapNode* p) {
arr->size++;
arr->nodes = realloc(arr->nodes, arr->size * sizeof(MapNode*));
(&(arr->nodes))[arr->size - 1] = p;
}
MapNodesArray* NewNodesArr() {
MapNode *first = realloc(NULL, 0 * sizeof(MapNode));
MapNodesArray temp = { first, 0 };
return &temp;
}
MapNodesArray* getConnectedNodesArray(MapNodePointer node, MapNode map[][12]) {
MapNodesArray* arr = NewNodesArr();
addNodeToEnd(&arr, &map[node->x - 1][node->y - 1]);
return arr;
}
请发布错误消息,并且其中完全程序崩溃(这函数调用等)。也请首先尝试使用您的调试器来浏览程序,以便确定具体问题。 – UnholySheep
提示:不要在typedefs后面隐藏指针。另外,'addNodesToEnd'看起来很狡猾...... – Deduplicator
@prq:你打算来试试建议我的K&R的拷贝吗? – geoffspear