2016-12-08 2 views
-1

Cette partie de mon code concerne l'inscription.Comment puis-je enregistrer une chaîne dans un tableau 2D dynamique?

Je ne peux m'inscrire qu'une seule fois, la prochaine fois que le programme s'arrête.

Quel est le problème?

while (1) { /*usercounter initialized with 0*/ 
    printf("enter your order:\n"); 
    gets(buffer); 
    order = strtok(buffer, " "); 
    if (strcmp(order, "signup") == 0) { 
     usercounter++; 
     if (usercounter > 50) { 
      username=realloc(username,usercounter*sizeof(*username)); 
      password=realloc(password, usercounter*sizeof(*password)); 
     } 
     username[(usercounter - 1)] = (char *)malloc(50*sizeof(char)); 
     strcpy(username[usercounter - 1], strtok(NULL, " ")); 
     password[(usercounter - 1)] = (char *)malloc(50*sizeof(char)); 
     strcpy(password[usercounter - 1], strtok(NULL, "\n")); 
     free(buffer); 
     continue; 
    } 
} 
+1

[N'utilisez PAS 'gets()', c'est dangereux] (http://stackoverflow.com/q/1694036/2173917). utilisez plutôt ['fgets()'] (https://linux.die.net/man/3/fgets) à la place. –

+0

'free (buffer);'!? – BLUEPIXY

+0

Tout ce que je vois ici est un code très dangereux et des exploits. Je ne connais pas assez C pour couvrir les correctifs sans introduire d'autres bugs, mais il y a une utilisation après free, gets(), et je ne vois pas comment vous gérez (comptage) vos références donc des fuites et des failles sont susceptibles de se produire. – gelliott181

Répondre

0
free(buffer); 

pourquoi il est utilisé, cela conduira à un comportement non défini, vous libérez une mémoire statique. Supprimez l'instruction ci-dessus.

Le repos est bon.

+1

Comment savez-vous que buffer est une mémoire statique? – yano