gpt4 book ai didi

c - 在 extern 函数内重新分配 C 数组

转载 作者:行者123 更新时间:2023-11-30 19:51:14 24 4
gpt4 key购买 nike

嗨,我试图在每次解析时在我的 main() 中分配一个 char* 数组,然后在外部函数中分配 realloc循环查找一个文件。除了 char * files[]mallocrealloc 之外,我的所有代码都有效。

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

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

主.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);
}

解析.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 新手,并且指针仍然有点令人困惑。如果您还可以包含链接或解释,我们将不胜感激。

最佳答案

<小时/>

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

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

关于c - 在 extern 函数内重新分配 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com