私は2つのコードを持っています:
gb_Graph = (int **)malloc(sizeof(int*)*gb_nVertices);
if (gb_Graph == NULL)
return false;
gb_Open = (VERTEX *)malloc(sizeof(VERTEX*)*gb_nVertices);
if (gb_Open == NULL)
return false;
gb_Close = (VERTEX *)malloc(sizeof(VERTEX*)*gb_nVertices);
if (gb_Close == NULL)
return false;
for (i = 0; i < gb_nVertices; i++)
{
gb_Graph[i] = (int*)malloc(sizeof(int)*gb_nVertices);
if (gb_Graph[i] == NULL)
return false;
for (j = 0; j<gb_nVertices; j++)
fscanf(gb_fInput, "%d", &(gb_Graph[i][j]));
}
for (i = 0 ; i<gb_nVertices; i++)
{
gb_Open[i].Exist = false;
gb_Open[i].ParentName = -1;
gb_Open[i].CostPath = 0;
fscanf(gb_fInput, "%d", &(gb_Open[i].CostHeuristic));
gb_Close[i].Exist = false;
gb_Close[i].ParentName = -1;
gb_Close[i].CostPath = 0;
gb_Close[i].CostHeuristic = gb_Open[i].CostHeuristic;
}
gb_Open[gb_nStart].Exist = true;
と
gb_Graph = (int **)malloc(sizeof(int*)*gb_nVertices);
if (gb_Graph == NULL)
return false;
for (i = 0; i < gb_nVertices; i++)
{
gb_Graph[i] = (int*)malloc(sizeof(int)*gb_nVertices);
if (gb_Graph[i] == NULL)
return false;
for (j = 0; j<gb_nVertices; j++)
fscanf(gb_fInput, "%d", &(gb_Graph[i][j]));
}
gb_Open = (VERTEX *)malloc(sizeof(VERTEX*)*gb_nVertices);
if (gb_Open == NULL)
return false;
gb_Close = (VERTEX *)malloc(sizeof(VERTEX*)*gb_nVertices);
if (gb_Close == NULL)
return false;
for (i = 0 ; i<gb_nVertices; i++)
{
gb_Open[i].Exist = false;
gb_Open[i].ParentName = -1;
gb_Open[i].CostPath = 0;
fscanf(gb_fInput, "%d", &(gb_Open[i].CostHeuristic));
gb_Close[i].Exist = false;
gb_Close[i].ParentName = -1;
gb_Close[i].CostPath = 0;
gb_Close[i].CostHeuristic = gb_Open[i].CostHeuristic;
}
gb_Open[gb_nStart].Exist = true;
最初のコードでは、エラーが発生します。ファイルから値を読み取った後にブレークポイントを 2 つのコードで gb_Graph 変数に入れても、違いはありません。しかしその後、gb_Open[gb_nStart].Exist = true; にブレークポイントを設定します。、最初のコードでは、gb_Graph の値が変更されます。
それがメモリ割り当ての順序だと思います。右?
変数を使用:
VERTEX *gb_Open;
VERTEX *gb_Close;
int **gb_Graph;
なぜ間違っているのか説明してください。私はVS C++ 2012を使用しています