2016-12-08 7 views
-1

Эта часть моего кода касается регистрации.Как сохранить строку в динамическом массиве 2d?

Я могу зарегистрироваться только один раз, когда следующий раз программа остановится.

В чем проблема?

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

[НЕ использовать 'gets()', это опасно] (http://stackoverflow.com/q/1694036/2173917). используйте вместо этого '' fgets() '] (https://linux.die.net/man/3/fgets). –

+0

'free (buffer);'!? – BLUEPIXY

+0

Все, что я вижу здесь, очень опасный код и эксплойты. Я недостаточно разбираюсь в C, чтобы охватить исправления, не введя другие ошибки, но есть использование после бесплатных, gets() проблем, и я не вижу, как вы управляете (подсчитываете) свои ссылки, так что утечки и ошибки вероятно, произойдут. – gelliott181

ответ

0
free(buffer); 

почему это используется, это приведет к непредсказуемому поведению, вы освободив статическую память. Удалите вышеуказанное утверждение.

Отдых в порядке.

+1

как вы знаете, что 'buffer' является статической памятью? – yano

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

  • Нет связанных вопросов^_^