EXC_BAD_ACCESS 重新分配内存时出错
EXC_BAD_ACCESS error by reallocate memory
我正在尝试制作动态双精度数组,但我遇到了 BAD_ACCSESS 的问题。
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);
}
所以,我在 execute() 中初始化 parsed_command,然后当我的输入超过一个单词时,在 parsed_command_input() 中重新分配它。
通过第一次重新分配 parsed_command 一切正常,但是在第二轮重新分配 parsed_command 的地址发生变化,我有 BAD_ACCSESS 通过 malloc (为行添加内存)。
我该如何解决?
提前致谢
*parsed_command[counter]
与 *(parsed_command[counter])
的意思相同,但你的意思是 (*parsed_command)[counter]
所以这样写。
我正在尝试制作动态双精度数组,但我遇到了 BAD_ACCSESS 的问题。
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);
}
所以,我在 execute() 中初始化 parsed_command,然后当我的输入超过一个单词时,在 parsed_command_input() 中重新分配它。 通过第一次重新分配 parsed_command 一切正常,但是在第二轮重新分配 parsed_command 的地址发生变化,我有 BAD_ACCSESS 通过 malloc (为行添加内存)。
我该如何解决?
提前致谢
*parsed_command[counter]
与 *(parsed_command[counter])
的意思相同,但你的意思是 (*parsed_command)[counter]
所以这样写。