gpt4 book ai didi

c - 将文件读入缓冲区,但调用 fseek 后程序在 fread 处崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:13 25 4
gpt4 key购买 nike

我想将文件读入缓冲区。我在 fread() 处遇到段错误。看起来 ftell() 返回正确的大小。但后来事情出了问题。 fseek()会修改f吗?为什么 fread() 不起作用?

int pk_load_file( const char *filename )
{
FILE *f;
int size;
unsigned char *buf;

if( ( f = fopen( filename, "rb" ) ) == NULL )
return -1;

fseek( f, 0, SEEK_END );

if( ( size = ftell( f ) ) == -1 )
{
fclose( f );
return -2;
}

fseek( f, 0, SEEK_SET );

if( fread( buf, 1, size, f ) != size )
{
fclose( f );
return -3;
}

fclose( f );

return( 0 );
}

最佳答案

这里的问题是

if( fread( buf, 1, size, f ) != size )

在上述情况下,您使用的是未初始化的 buf。在使用它之前,您需要为 buf 分配内存。

由于未初始化,buf 可以指向进程无法访问的任何内存位置。因此,尝试访问 buf 指向的内存会调用 undefined behaviour .

段错误是副作用之一。

解决方案:您可以使用 malloc() 将内存分配给 buf和家人。

关于c - 将文件读入缓冲区,但调用 fseek 后程序在 fread 处崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31603804/

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