这是我的代码:
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发送到其他功能。
line_lenght
不指向任何地方。 它包含一个 NULL 指针。 因此,当getline
尝试取消引用此空指针时,您会调用未定义的行为,在这种情况下会导致崩溃。
不要将line_lenght
定义为size_t *
,而是将其定义为size_t
并传递其地址。
size_t line_length = 0;
getline(&new_line, &line_length, FilePointer);
至于在哪里调用free
,由于ReadOneLine
返回了错误定位的缓冲区,因此调用ReadOneLine
的函数需要调用free
。 在这种情况下,than 意味着您需要在完成 main
函数后在 free(buffer)
中调用它。