2016-12-18 1 views
-3

동적 이중 배열을 만들려고하는데 BAD_ACCSESS에 문제가 있습니다.메모리를 재 할당하여 EXC_BAD_ACCESS 오류

int execute(person* person_array) 
{ 
char** parsed_command; 
if(!(parsed_command = malloc(sizeof(char*)))){ 
    error_notification(12); 
    return 2; 
} 
parsed_command[0] = malloc(SIZE_ARG*sizeof(char)); 
char command[MAX_BUFFER_SIZE]; 
string quit = "quit\n"; 
do{ 
    printf("esp> "); 
    if(fgets(command, MAX_BUFFER_SIZE, stdin)==NULL){ // save input in "command" 
     return 2; 
    } 
    parse_command_input(command, person_array, &parsed_command); 
}while(strcmp(command,quit)); 
printf("Bye.\n"); 
free(&parsed_command[0]); 
free(parsed_command); 
return 0; 
} 

void parse_command_input(const char* command, person* person_array, char*** parsed_command){ 
char* delim = strtok(command, " "); 
int counter = 0; 
while (delim != NULL){ 
    if(counter > 0) { 
     char **tmp = realloc(*parsed_command, (counter+1)*sizeof(char*)); 
     if(tmp!=NULL) 
      *parsed_command = tmp; 
     else{ 
      error_notification(12); 
     } 
     *parsed_command[counter] = malloc(SIZE_ARG*sizeof(char)); //ERROR 
    } 
    strcpy(*parsed_command[counter], delim); 
    counter++; 
    delim = strtok (NULL, " \n"); 
} 
which_command(parsed_command, counter, person_array); 
}  

그래서, parsed_command 됨) (실행 초기화하고 parsed_command_input() 나 입력에 두 개 이상의 단어가있는 경우에 재 할당. parsed_command를 처음 재 할당하면 모든 것이 정상이지만 두 번째 재 할당 라운드에서 parsed_command의 주소가 바뀌고 malloc (행에 메모리 추가)에 의해 BAD_ACCSESS가 생깁니다.

어떻게 해결할 수 있습니까? 사전

+0

'무료 (& parsed_command [0]);'->'무료 (parsed_command [0]);' – BLUEPIXY

+0

@BLUEPIXY 고마워요 –

답변

1

*parsed_command[counter]에서

덕분에 *(parsed_command[counter])와 같은 의미하지만 당신은 그래서 쓰기 (*parsed_command)[counter]을 수를 의미했다.

+0

고마워요 !! 이제는 작동 중입니다 –

+0

@AntonBarinov 아니요, 코드가 잘못되었습니다. 수많은 메모리 누출이 있습니다. –

+0

아직 valgrind로 확인하지 않았으므로 여기서 많은 메모리 누수가 발생하고 무료 함수가 유효하지 않으므로 오류가없는 것으로 확인됩니다. 그게 아무것도 아닌 것보다 낫네. 나는 그것을 내 자신으로 고치려고 노력할 것이고, 내가 그것을 할 수 없다면, 나는 여기서 질문을 게시 할 것이다. –

관련 문제