2017-12-12 15 views
-1

こんにちは、私はchar*配列を私のmain()にmallocしようとしています。次に、解析ループがファイルを見つける度にextern関数でreallocになります。 mallocreallocchar * files[]を除くすべてのコードは動作します。extern関数内でC配列を再配置する

私は、次のコードを実行すると、私はこのエラーを受け取る

*** 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

'* files = realloc(files、amtFiles * sizeof * files);'何なのですか? – John3136

+1

あなたが何を再割り当てしているのか、あなたは帰ってきたものを見てください。 '* files'と' files'は同じものではありません。それは図を描くのに役立つかもしれません。 – Galen

+0

フォーマットは改善されましたが、 '{'はまだどこかで見つからないか、余分な '}'がコーディングされています。戻り値がありません – chux

答えて

-1

は、char **です(パラメータは実際のchar ***ですので、あなたはそのアドレスを渡す)が、parseArgumentsが唯一のchar * []になります。

のプロトタイプを追加するあなたのメインファイルのプロトタイプを追加するのはchar **です(そのパラメータを実際にcharとするようにアドレスを渡します)*** parseArgumentsはchar * []を取ります。 main.cにあり、コンパイラはこれについてあなたに伝えます。私はそれが正しいあなたのメインだと思うが、私はそれを確認するコードを解析していない。

関連する問題