gpt4 book ai didi

c - 指针未分配

转载 作者:行者123 更新时间:2023-12-02 21:33:46 27 4
gpt4 key购买 nike

我所做的就是在 c (char*) 中启动一个双指针来保存我的字符串数组。我将此变量 (char* array_strings) 传递到另一个函数中,该函数应该打开一个文件并创建一个表示文件每一行的字符串数组,但由于某种原因,当我从函数返回时,变量 array_strings 为 null。

int main(void) {
char **array_strings;
char *book_file = "book.txt";
delimitByNewline(book_file, array_strings);
return 1;
}

//delimit file

void delimitByNewline(char *book, char **array) {
int count = 0;
int i = 0;
char c;
int size = fileLines(book);
srand(time(NULL));
char **ret_array = (char **)malloc(sizeof(char *) * size);

FILE *bk = fopen(book, "rt");
if(!bk) {
perror("fp");
exit(1);
}

char *line = (char *)malloc(sizeof(char)*60);

while ((c = fgetc(bk)) != EOF) {
line[i] = c;
i++;
if(c == '\n') {
ret_array[count] = line;
line = (char *)malloc(sizeof(char) * i);
count++;
i = 0;
}

}

fclose(bk);
array = ret_array;
free(line);
free(ret_array);
}

最佳答案

由于您在函数中分配集合,因此需要将其返回给调用者。

我建议将返回签名从 void 更改为 char ** 并将流程更改为:

char** delimitByNewline(char* book){
char** ret_array = (char **)malloc(sizeof(char *)*size);
// .. assign the strings, don't free!
return ret_array;
}

并这样调用:

char* book_file = "book.txt";
char** array_strings = delimitByNewline(book_file);

(请注意 @JonathanLeffler 的评论 - 堆分配的 ret_array 的所有权传回调用者 - 即调用者必须 free,而不是 delimitByNewLine() .!)

编辑

如果您确实想将数组作为输出参数传递,则需要传递原始指针的地址,因为该函数需要它来分配 malloced 的地址数组即:

char **array_strings = 0; // NULL
char *book_file = "book.txt";
delimitByNewline(book_file, &array_strings);
// do stuff
// free strings + array

然后需要取消引用来分配它。

void delimitByNewline(char *book, char ***array) {
*array = (char **)malloc(sizeof(char *) * size);
// ... Don't free

关于c - 指针未分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21863050/

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