こんにちは、私はchar*
配列を私のmain()
にmallocしようとしています。次に、解析ループがファイルを見つける度にextern関数でrealloc
になります。 malloc
とrealloc
のchar * 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を新しくしていて、ポインタもまだまだ混乱しているので、それを理解するのは苦労しています。リンクや説明を含めることができれば、非常に感謝しています。メインのファイルで
'* files = realloc(files、amtFiles * sizeof * files);'何なのですか? – John3136
あなたが何を再割り当てしているのか、あなたは帰ってきたものを見てください。 '* files'と' files'は同じものではありません。それは図を描くのに役立つかもしれません。 – Galen
フォーマットは改善されましたが、 '{'はまだどこかで見つからないか、余分な '}'がコーディングされています。戻り値がありません – chux