編集:元のコードの実際の構造に似るようにコードを大幅に変更しました(すべてが何であるかを説明するページやページを作成する必要があるため、投稿できません)。
私はこの問題に苦しんでいます。6つのint配列、、、、、、、およびがあります。ここでID1
、同じインデックスを持つ名前の長さは同じです(それぞれ、、、)。これらの配列の長さが内部で変化するため、forループでそれらを再作成するという考え方です。私はこれを次のように行っています:ID2
ID3
array1
array2
array3
len1
len2
len3
/* Before entering the loop, I define these three arrays, where
len1, len2 and len3 are all equal to 100. */
int i,S,len1,len2,len3;
len1=100;
len2=100;
len3=100;
int* ID1;
int* ID2;
int* ID3;
ID1=(int*) malloc((len1)*sizeof(int));
ID2=(int*) malloc((len2)*sizeof(int));
ID3=(int*) malloc((len3)*sizeof(int));
/* Then I fill the arrays with values from a loop which is not relevant
to my problem. Let's just fill them with a simple for loop: */
for(i=0;i<len1;i++){
ID1[i]=i;
ID2[i]=i;
ID3[i]=i;
}
/* Now I enter a loop, in which I create 3 more arrays named array1, array2
and array3: */
for(S=98;S>=0;S--){
printf("ID3[99]:%d (before)\n",ID3[99]); // 1st call to printf
int* array1;
int* array2;
int* array3;
array1=(int*) malloc((len1)*sizeof(int));
array2=(int*) malloc((len2)*sizeof(int));
array3=(int*) malloc((len3)*sizeof(int));
printf("ID3[99]:%d (after)\n",ID3[99]); // 2nd call to printf
/* I do more stuff here. Here len1, len2 and len3 changes, so I have to
re-create the "ID" arrays and the ones named "array". The idea is to fill
the new "ID1", "ID2" and "ID3" arrays with the values of another set of
arrays that I filled with values from complex calculations named
"AnotherArray1", "AnotherArray2" and "AnotherArray3".
The lenghts are always > 100.*/
free(ID1);
free(ID2);
free(ID3);
free(array1);
free(array2);
free(array3);
int* ID1;
int* ID2;
int* ID3;
ID1=(int*) malloc((len1)*sizeof(int));
ID2=(int*) malloc((len2)*sizeof(int));
ID3=(int*) malloc((len3)*sizeof(int));
for(i=0;i<len1;i++){
ID1[i]=AnotherArray1[i];
}
for(i=0;i<len2;i++){
ID2[i]=AnotherArray2[i];
}
for(i=0;i<len3;i++){
ID3[i]=AnotherArray3[i];
}
/* Finally, I need to free the "AnotherArray" arrays, because in the loop
I need to create them again and do some complex calculations with the
"ID" arrays. */
free(AnotherArray1);
free(AnotherArray2);
free(AnotherArray3);
printf("ID3[99]:%d (before, after starting the loop again)\n",ID3[99]); // 3rd call to printf
}
問題は、これを行うと、printf
関数の3番目の呼び出しが1番目と2番目の呼び出しと異なることです(つまり、ループが再開すると、一部の要素のID3の値が突然変化します!)。ここで何が起こっているのか本当にわかりません...何かアドバイスはありますか?詳細が必要な場合はお知らせください。