gpt4 book ai didi

c - 我在分配内存时遇到问题。(也许)

转载 作者:行者123 更新时间:2023-11-30 18:17:18 26 4
gpt4 key购买 nike

有输入文件;未排序的长类型数字。(约100万)我想对输入文件中的数字进行排序。为了分配数组的内存,我使用了fseek和ftell。但出现段错误。如何修复代码?

int main( int argc, char *argv[] )
{
long *arr;
FILE *fp = NULL;
FILE *fp2 = NULL;
int i = 0;
long size, count;

fp = fopen( "argv[1]", "r" );
fp2 = fopen( "sorted", "w" );
if ( fp == NULL || fp2 == NULL )
printf( "error \n" );
else
{
fseek( fp, 0, SEEK_END );
size = ftell( fp );
arr = ( long * ) malloc( size );
count = fread( arr, size, 4, fp );

Quicksort( arr, 0, sizeof( arr ) / sizeof( int ) - 1 );

while ( i != ( sizeof( arr ) / sizeof( int ) - 1 ) )
{
int i = 0;
int j;
for ( j = 0; j < 5; j++ )
fwrite( arr, size, 1, fp2 );
}
}
fclose( fp );
free( arr );
fclose( fp2 );
return 0;
}

最佳答案

问题在于代码使用 ftell() 查找文件中的字节数,然后分配该数据的size 数量。

但是,当从文件中读取时,由于元素计数元素大小,它尝试读取四倍多的数据> 传递给 fread()

如果输入文件是一大块二进制长整型数据(与本地硬件的格式相同),则可以一次性 fread() 读取该数据 block 。这意味着您的大小是 ftell() 结果,但元素计数是

fseek( fp, 0, SEEK_END );
size = ftell( fp );
arr = ( long * ) malloc( size );
count = fread( arr, size, 1, fp ); // read the whole block in a single go

关于c - 我在分配内存时遇到问题。(也许),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566505/

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