我嘗試用一種新的結構爲動態「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