У меня есть указатель на структуру.Указатель необъяснимо изменяемый
typedef struct anything{
char text[MAXI];
int any;
}Item;
После получения ввода в структуре программа запрашивает пользователя, в котором он хочет сохранить структуру.
void adding(){
Item *x = malloc(sizeof(Item));
printf("Enter an integer.");
scanf("%d", (&x->any));
printf("Enter a string.");
scanf("%s", (&x->text));
printf("Which set would you like to add the Item to A/B?");
char inp1 = 0;
while ((inp1=0),scanf("%s", &inp1) == 1 && (inp1 != 'A') && (inp1 != 'B')){
printf("Set does not exist\n");
}
if('A' == inp1)
add(A, x);
else
add(B, x);
flush();
instructs();
}
При приеме ввода (в то время цикла), указатель х модифицируется от 0x570ff8 к 0x57f00, который будет указывать на то мусор вместо ввода запрошенной ниже.
Почему изменяется указатель?
спасибо.
Функция дополню:
void add(Array *S,Item *x){
bool rep = false;
int i = 0;
for(i = 0; i<=(S->size); i++){
if(compStructs(*x,*(S->arr+i)))
rep = true;
}
if(rep == false){
x = realloc(S->arr, (S->size+1)*sizeof(Item));
(S->size)++;
printf("Item has been added");
}
else
printf("The item is already in the set.");
}
'(INP1 = 0)' 'Так что, когда (INP1 = 0)' 'будет 'A''? Или эта модификация не является одной последовательностью? – dhein
Показать код для 'add()'. –
inp1 используется для проверки того, что scanf считывает 1 элемент. Inp1! = A и inp! = B также используются для уведомления пользователя при вводе неверного ввода. – user2035045