Скажем, у нас есть файл с таким содержанием:
1
2
3
4
5
5
4
3
2
1
2
3
4
5
1
4
5
3
2
1
5
1
2
3
4
Затем с этим кодом:
int main(){
FILE * file = fopen("CondorcetVote.txt", "r");
int candidateCount = 4;
int voters = 5;
int voteClassificationSize = 5;
int a,b,c,d,e,f,g,h,i,j;
int votePosition, voteIndex;
char * temp = malloc(sizeof(char) * 100);
CommonVote * cV = malloc(sizeof(int) * voters);
int groupCVCount = 0;
int * votesToModify = calloc(voters * voteClassificationSize, sizeof(int));
int add = 0;
printf("VC %d\n", voteClassificationSize);
for(a=0;a<voters;a++){
(cV+a)->votes = calloc(voteClassificationSize, sizeof(int));
for(b=0;b<voteClassificationSize;b++){
*( ((cV+a)->votes) + b) = 0;
// printf("%p\n", ( ((cV+a)->votes) + b));
//printf("Initialize Dis %d\n", *( ((cV+a)->votes) + b));
}
(cV+a)->count = 0;
}
//for(a=0;a<v)
for(a=0;a<voters;a++){
for(b=0;b<voteClassificationSize;b++){
fgets(temp, NAME_MAX, file);
int length = strlen(temp);
temp += length - 1;
*temp = '\0';
temp -= length - 1;
*(votesToModify+add) = getIntegerFromChar(temp);
///printf("VTM: %d\n", *(votesToModify+add));
add++;
}
}
add = 0;
for(a=0;a<voters;a++)
for(b=0;b<voteClassificationSize;b++){
printf("%d\n",*( ((cV+a)->votes) + b));
}
fclose(file);
free(cV);
free(temp);
return 0;
}
Теперь проблема в том, что адрес ИЗМЕНЕН. Несмотря на то, что целочисленный указатель голосов имеет достаточный выделенный размер, и адрес фактически печатается правильно, если печатается сразу после вызова функции callo c, если адрес печатается в третьем l oop, как показано выше, он все равно будет печататься справа, пока переменная a во втором l oop не достигнет 4, адрес памяти которого он внезапно изменит.
это печатный адрес:
00782C68
00782C6C
00782C70
00782C74
00782C78
007823C8
007823CC
007823D0
007823D4
007823D8
007823E8
007823EC
007823F0
007823F4
007823F8
00000001
00000005
00000009
0000000D
00000011
Глядя на последний адрес, значение сразу изменилось во что-то ... Нужна помощь в этой проблеме.