【问题标题】:EXC_BAD_ACCESS error by reallocate memory重新分配内存导致的 EXC_BAD_ACCESS 错误
【发布时间】:2016-12-18 23:31:48
【问题描述】:

我正在尝试制作动态双精度数组,但我遇到了 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 的地址发生了变化,并且我通过 malloc 获得了 BAD_ACCSESS(为行添加内存)。

我该如何解决?

提前致谢

【问题讨论】:

  • free(&parsed_command[0]); --> free(parsed_command[0]);

标签: c malloc realloc


【解决方案1】:

*parsed_command[counter]*(parsed_command[counter]) 的含义相同,但您的意思是 (*parsed_command)[counter],所以这样写。

【讨论】:

  • @AntonBarinov 不,代码无效。有很多内存泄漏。
  • 我还没有用 valgrind 检查它,我确信这里有很多内存泄漏,导致免费函数无效,但它可以正常工作。这总比没有好:) 我会尝试自己解决它,如果我做不到,我会在这里发布问题
猜你喜欢
  • 2017-11-21
  • 2020-11-04
  • 2015-12-15
  • 2012-11-27
  • 2021-03-02
  • 2015-11-18
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多