学校での課題の場合、構造体を使用して、無限の量の行列に対して無限の量のポイントを格納できる行列を作成する必要があります。(理論上の無限)
割り当てには、callocとreallocを使用することにしました。マトリックスのサイズは次のとおりです。ポイントの制限に達するたびにサイズが2倍になります(つまり、1から始まり、2、4というように続きます)。また、マトリックスが追加されるたびにサイズが2倍になります。
これが私の問題です。最初の行列が追加され、2番目の行列の名前とポイントが追加されると、次のようになります。
B???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Bは私が欲しい部分です(後でstrcmpを使用するので)が、?マークはそこにあるはずではありません。(明らかに)
なぜそれが正確にこれを行っているのかわかりません。コードはモジュール式であるため、コードの一部を取得して、これがどのように行われているのかを正確に示すことは簡単ではありません。
注:次の方法でマトリックスのポイントにアクセスできます:(MyMatrix[1].points[0].x_cord;
これは単なる例です)
問題を引き起こすサンプルコード:
構造体:
struct matrice {
char M_name[256];
int num_points[128];
int set_points[128];
int hasValues[1];
struct matrice_points * points;
} * MyMatrix;
struct matrice_points {
int set[1];
double cord_x;
double cord_y;
};
マトリックス関数の設定:
void setupMatrix(){
MyMatrix = calloc(1, sizeof(*MyMatrix));
numMatrix = 1;
}
行列関数の成長:
void growMatrix(){
MyMatrix = realloc(MyMatrix, numMatrix * 2 * sizeof(*MyMatrix));
numMatrix = numMatrix * 2;
}
行列を一度大きくした後にこの問題を出力する行列関数を追加します。
void addMatrix(char Name, int Location){
int exists = 0;
int existsLocation = 0;
for (int i = 0; i < numMatrix; i++){
if (strcmp(MyMatrix[i].M_name, &Name) == 0){
exists = 1;
existsLocation = i;
}
}
*MyMatrix[Location].M_name = Name;
printf("Stored Name: %s\n", MyMatrix[Location].M_name);
*MyMatrix[Location].num_points = 1;
*MyMatrix[Location].set_points = 0;
*MyMatrix[Location].hasValues = 1;
MyMatrix[Location].points = calloc(1, sizeof(*MyMatrix[Location].points));
}