"地址越界"当访问传递给函数的指针的第二个元素时

时间:2015-06-28 07:56:11

标签: c pointers arguments

我有这个功能:

int scan_arguments(int *words_count, char ***words, char **file)
{
    /* If the first argument is equal to "/f" copy the second argument in the file variable */
    if (*words_count > 2 && !strncmp(*words[0], "/f", 2)) {
        if(!(file = malloc(strlen(*words[1]) + 1))) {
            printf("Allocation error");
            return 1;
        }
        strcpy(*file, *words[1]);
        words += 2;
        words_count -= 2;
}

我从我的主要功能中这样称呼它:

int main(int argc, char **argv)
{
    char *file = "", **words;
    int words_count;

    /* Copy the arguments and discard the program name */
    words = argv + 1; 
    words_count = argc - 1;

    scan_arguments(&words_count, &words, &file);
}

我的功能的目的是检查第一个参数是" / f"如果是,则将第二个参数存储在文件字符串中。

问题是当执行到达strlen(* words [1])部分时,程序停止工作,从调试器我得到"地址越界"。我无法理解问题是什么,因为* words [0]得到了正确的评估。

很抱歉,如果这可能是一个简单的问题,但这是我的第一个带指针的严肃计划,我仍然有一些困难。

感谢您的帮助!

修改

感谢@BLUEPIXY和@CoolGuy我改变了我的功能:

/* If the first argument is equal to "/f" copy the second argument in the file variable */
if (*words_count > 2 && !strncmp((*words)[0], "/f", 2)) {
    if(!(*file = malloc(strlen((*words)[1]) + 1))) {
        printf("Allocation error");
        return 1;
    }
    strcpy(*file, (*words)[1]);
    *words += 2;
    *words_count -= 2;
}

它现在完美无缺。谢谢!

0 个答案:

没有答案