这是我的代码:
char* ReadOneLine(char *FileName)
{
FILE *FilePointer = fopen(FileName, "r");
assert(FilePointer != NULL);
char* new_line = NULL;
size_t *line_lenght = 0;
//ssize_t line_size;
getline(&new_line, line_lenght, FilePointer);
assert(new_line == NULL);
return(new_line);
}
int main()
{
char* buffer = ReadOneLine("example"); //Buffer will do somthing later...
return (0);
}
在尝试运行程序时,我一直收到此错误,但我不明白为什么。 另外,我知道我应该在使用new_line之后释放它,但是我不确定在哪里,因为我还将new_line发送到其他函数。
答案 0 :(得分:4)
指针line_lenght
没有指向任何地方。它包含一个NULL指针。因此,当getline
尝试取消引用此空指针时,您将调用undefined behavior,在这种情况下会导致崩溃。
不要将line_lenght
定义为size_t *
,而是将其定义为size_t
并传递其地址。
size_t line_length = 0;
getline(&new_line, &line_length, FilePointer);
关于调用free
的位置,由于ReadOneLine
返回了已分配的缓冲区,因此调用ReadOneLine
的函数需要调用free
。在这种情况下,这意味着完成后需要在free(buffer)
函数中调用main
。