2013-12-16 2 views
0

я следующая проблема с кодом, это сброшенные в этой функции:Динамические структуры

int EliminarRelacion() { 

struct amigos *ancla=primero, *ant=NULL; 
char user1[12], user2[12]; 
int i=1; 

printf("Nombre usuario 1: "); scanf("%s", &user1); 
printf("Nombre usuario 2: "); scanf("%s", &user2); 

while(ancla!=NULL) { 
    if(i>=2) { //Guarda la posición anterior a ancla 
     if(i==1) 
      ant = primero; 
     else 
      ant = ant->siguiente; 
    } 

    if(!(strcmp(ancla->usuario1, user1) && strcmp(ancla->usuario2, user2))) { 
     ant->siguiente = ancla->siguiente; 
     //free(ancla->usuario1); 
     //free(ancla->usuario2); 
     free(ancla); 
     printf("Eliminado...\n"); 
     return 1; 
    } 
    ancla = ancla->siguiente; 
    i++; 
} 

if(i==1) 
    printf("%c NO EXISTEN AMISTADES ACTUALMENTE %c\n", 16, 17); 

return 0; 

} 

Этот код призван устранить (бесплатно динамическую память) где-то в структуре, указанной пользователем клавиатуры.

+0

Итак, в чем проблема? – OldProgrammer

+0

В функции int EliminarRelacion() программа падает, чтобы найти элемент, который нужно удалить. – user3042068

+0

Кодовый фрагмент 'if (i> = 2) { if (i == 1) ant = primero; else ant = ant-> siguiente; } 'своеобразен; строка 'ant = primero;' никогда не будет выполнена, потому что 'i' не 1, если она' = = 2'. –

ответ

1

Проблема с кодом, что я вижу,

printf("Nombre usuario 1: "); scanf("%s", &user1); 
              ^--------------Here 
printf("Nombre usuario 2: "); scanf("%s", &user2); 
              ^--------------Here 

scanf функция принимает адрес переменной, а вы пытаетесь ввести строку. Упомянув имя массива user1 или user2, вы получите адрес. Но вы передаете &user1 и &user2 в качестве параметра в функцию scanf.

Если логика для нахождения элемента, чтобы быть удаление является правильным, и вы измените код

printf("Nombre usuario 1: "); scanf("%s", user1); 
printf("Nombre usuario 2: "); scanf("%s", user2); 

Он должен работать.

0

Люди, я нашел проблему. В условиях:

if((strcmp(anchor->user1, user1) && strcmp (anchor->user2, user2))) 

должно быть:

if((strcmp(anchor->user1, user1)==0) && (strcmp(anchor->user2, user2)==0)) 

Программа завершает работу при входе в первый раз.

Спасибо всем!

Смежные вопросы