为什么我的访问权限很差

时间:2014-05-10 08:52:46

标签: c ansi

我有一个结构如下

struct cmd{

  char **tokenized_cmd;
  int num_params;
}

在带签名的某些功能中 我有以下

void parse_cmd(cmd, char *line){

    char *token;
    char *saveptr;
    char *delim_space;
    char *delim_comma;
    char *delim_new_line;
    char **result;
    int i;
    int j=0;
    command.num_params = 0;
    delim_space = " ";
    delim_comma = ",";
    delim_new_line = "\n";
    if(line!=NULL){
        line = strtok(line,delim_new_line);
        token = strtok_r(line,delim_space,&saveptr);
    }
    result[j]=token;
    j++;
    for (i=0;i<3;i++){
        token = strtok_r(NULL, delim_comma, &saveptr);
        if(token!=NULL){
            result[j] = token;
            j++;
        }else{
            result[j]='\0';
            break;
        }
    }
    command.tokenized_cmd = result;
    command.num_params = j;

    if(command.tokenized_cmd[0] == '\0'){
     printf("empty");
    }

}

为什么这段代码:

if(command.tokenized_cmd[0] == '\0'){
     printf("empty");
    }

导致访问错误?

这似乎无法解决问题:

 command.tokenized_cmd = malloc(sizeof(result));
    for(i=0;i<j;i++){
        command.tokenized_cmd[i]= malloc(sizeof(result[i]));
        command.tokenized_cmd[i] = result[i];
    }
    command.num_params = j;

1 个答案:

答案 0 :(得分:1)

您似乎没有为result分配空间,因此此步骤无法提供任何可访问的内容:

command.tokenized_cmd = result;

如果result正在存储多个字符串,那么您需要分配空间来存储char *个字符串malloc()

此外,对于每个单独的字符串或char *,您需要为{em> 分配malloc()的空间。

当您完成resulttokenized_cmd并且不再需要它时,您可能需要使用free()来恢复您已分配的内存,防止内存泄漏。对于你完成的双指针(char **),你必须释放字符串和指向这些字符串的指针。