在extern函数

时间:2017-12-12 22:02:40

标签: c arrays pointers malloc realloc

您好我每次在解析循环找到文件时尝试在我的char*main()数组中使用realloc数组,然后在外部函数中malloc。除了realloc的{​​{1}}和char * files[]之外,我的所有代码都有效。

当我运行以下代码时,我收到此错误

*** Error in `./Assignment2': double free or corruption (out): 0x00007ffcefe78e50 ***
======= Backtrace: =========
--Lots of memory locations listed--
Aborted (core dumped)

MAIN.C

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
  char **files = malloc(sizeof(char*));

  /* parse the command line arguments */
  parseArguments( argc, argv,&files);
}

parse.c

#include <stdlib.h>
#include "stddef.h";
#include <stdlib.h>
#include <argp.h>

char* printUsage();
extern int parseArguments(int argc, char *argv[], char *files[]) {
  int i = 1;
  int amtFiles = 0;
  /** Loops through each item turning on and off switches*/
  while (argc > 1) { /* i moves left to right 0 is file name so start at 1*/

      if (isFile(argv[i]) == 1) { /*if its a file */
        *files = realloc(files, amtFiles * sizeof *files);
        *files[amtFiles] = argv[i];
        /*printf("%s",*files[amtFiles]);*/
        amtFiles++;
      }

    }
    i++;/* increment argv[i] to next inputted char*/
    argc--; /* decrement the total amount of arguments to go through */

  }/*Loop ends */

}

我假设它有一个指针错误,但很难搞清楚,因为我是C的新手并且指针仍然有点令人困惑。如果您还可以包含链接或说明,我们将不胜感激。

1 个答案:

答案 0 :(得分:-1)

在你的主文件中是一个char **(并且你传递了它的地址,所以参数实际上是一个char ***)但是parseArguments只接受一个char * []。

为你的主文件添加一个原型是一个char **(你传递它的地址,所以参数实际上是一个char ***)nut parseArguments只接受一个char * []。在main.c中,编译器会告诉你这个。我怀疑这是你的主要是正确的,但我还没有解析代码以确保这一点。