2016-12-08 17 views
-1

私のコードのこの部分は申し込みについてです。ダイナミック2次元配列に文字列を保存するにはどうすればよいですか?

次回プログラムが停止したときに初めてサインアップすることができます。

何が問題ですか?

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

'空き(バッファ);'!? – BLUEPIXY

+0

私がここに見るのは、非常に危険なコードと悪用です。私は他のバグを導入することなく修正をカバーするのに十分なほどCに精通していませんが、無料で使用すると、問題が発生し、リファレンスを管理している(カウントしている)ようには見えません。発生する可能性があります。 – gelliott181

答えて

0
free(buffer); 

これが使用されている理由、それはあなたが静的なメモリを解放している、未定義の動作につながります。上記のステートメントを削除します。

安心です。

+1

'buffer'が静的メモリであることをどうやって知っていますか? – yano

関連する問題