2016-12-08 1 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 (버퍼);'!? – BLUEPIXY

+0

여기에 표시된 것은 매우 위험한 코드와 익스플로잇입니다. 나는 C에서 다른 버그를 도입하지 않고 수정 사항을 다루기에 충분한 지식이 없지만 무료로 사용하면 문제가 발생하고 참조를 관리 (참조)하는 방법을 볼 수 없으므로 누수 및 결함이 발생합니다. 발생할 가능성이있다. – gelliott181

답변

0
free(buffer); 

이 사용되는 이유, 그것은 정의되지 않은 동작으로, 정적 메모리를 해제하는 이어질 것입니다. 위의 진술을 제거하십시오.

나머지는 정상입니다.

+1

'buffer'가 정적 메모리라는 것을 어떻게 알 수 있습니까? – yano

관련 문제