C++ 为什么我要得到变量——正在使用而没有初始化错误?
我想用这个程序将哈希表写入文件 但我明白了 无法将参数1从“fpinfo”转换为“const void*” 编译时出错 如果我更改C++ 为什么我要得到变量——正在使用而没有初始化错误?,c++,runtime-error,fwrite,initialization,C++,Runtime Error,Fwrite,Initialization,我想用这个程序将哈希表写入文件 但我明白了 无法将参数1从“fpinfo”转换为“const void*” 编译时出错 如果我更改struct fpinfo e使用struct fpinfo*e我得到运行时错误: 正在使用变量“e”,但未初始化 我试图通过声明它为struct fpinfo*e=NULL来初始化e。这也不行 请像往常一样帮助我 WriteHTtoFile(struct fpinfo t[][B_ENTRIES],int this_tanker,tanker_record tr[]
struct fpinfo e代码>使用struct fpinfo*e
我得到运行时错误:
正在使用变量“e”,但未初始化
我试图通过声明它为struct fpinfo*e=NULL来初始化e代码>。这也不行
请像往常一样帮助我
WriteHTtoFile(struct fpinfo t[][B_ENTRIES],int this_tanker,tanker_record tr[][BUCKETS])
{
//struct fpinfo *e;
struct fpinfo e;
int i=0, mask;
char filename[sizeof ("file0000.txt")];
sprintf(filename, "filee%d.txt", this_tanker);
curr_tanker++;
//fp = fopen(filename,"w");
FILE *htfile=fopen(filename,"w+b");
system("cls");
if (htfile != NULL)
{
for (int j = 0; j < BUCKETS; ++j)
{
for (int k = 0; k < tr[this_tanker][j].bkt.num_of_entries; ++k)
{
printf("%d\t%d\t%s\n",t[j][k].chunk_offset,t[j][k].chunk_length,t[j][k].fing_print);
(e).chunk_offset=t[j][k].chunk_offset;
(e).chunk_length=t[j][k].chunk_length;
strcpy((char*)((e).fing_print),(char*)t[j][k].fing_print);
fwrite(e,sizeof(fpinfo),1,htfile);
}
}
fclose(htfile);
}
else
{
std::cout<<"File could not be opend for writing";
printf("Error %d\t\n%s", errno,strerror(errno));
}
fclose(htfile);
return 1;
}
writehtofile(struct fpinfo t[][B_ENTRIES],int this_carner,carner_record tr[][bucket])
{
//结构fpinfo*e;
结构fpe;
int i=0,掩码;
字符文件名[sizeof(“file0000.txt”);
sprintf(文件名为“filee%d.txt”,此文件名为);
curr_油轮++;
//fp=fopen(文件名,“w”);
FILE*htfile=fopen(文件名为“w+b”);
系统(“cls”);
如果(htfile!=NULL)
{
对于(int j=0;j std::coutfwrite()
的第一个参数是一个常量void*
。它传递一个结构fpinfo
:
fwrite(e, sizeof(fpinfo), 1, htfile);
改为:
fwrite(&e, sizeof(fpinfo), 1, htfile);
我不确定struct fpinfo
的成员是什么,因此这可能是不安全的(例如,如果它包含任何指针成员)。以后对struct fpinfo
中的成员进行任何重新排序,或进行任何导致struct fpinfo
大小增加的更改(如添加新成员)表示任何读取以前写入的struct fpinfo
数据的尝试都将不正确
当e
的声明更改为struct fpinfo*e;
时,单位化错误是由于指针未为NULL或被分配给动态分配的struct fpinfo
当更改为struct fpinfo*e=NULL;
时,当试图访问e
的任何成员时,这将导致分段错误,因为它没有指向struct fpinfo
,fwrite()
的第一个参数是常量void*
。这将传递一个struct fpinfo
:
fwrite(e, sizeof(fpinfo), 1, htfile);
改为:
fwrite(&e, sizeof(fpinfo), 1, htfile);
我不确定struct fpinfo
的成员是什么,因此这可能是不安全的(例如,如果它包含任何指针成员)。以后对struct fpinfo
中的成员进行任何重新排序,或进行任何导致struct fpinfo
大小增加的更改(如添加新成员)表示任何读取以前写入的struct fpinfo
数据的尝试都将不正确
当e
的声明更改为struct fpinfo*e;
时,单位化错误是由于指针未为NULL或被分配给动态分配的struct fpinfo
当更改为< >结构fpFix*e= null;当试图访问<代码> E/<代码>中的任何成员时,会导致分割错误,因为它没有指向“代码>结构fpFif} /代码>。< /p>这是C++,而不是C固定标签。文件应该是什么格式?看起来您只需要删除代码“CODE”。e> e
转换成文件应该使用的任何格式。你不能只将内存内容写入文件,然后期望它以后会有意义,除非你已经以已知格式序列化了这些内容。@DavidSchwartz这是一个二进制文件,多亏了你们,我已经成功地编写和读取了它。所有二进制文件都是什么格式的?你必须这样做转换为文件应该使用的格式。(您已将代码从似乎不起作用的代码转换为似乎起作用的代码。但它仍然非常脆弱,因为它没有实现合理的文件格式——除非您没有向我们展示的代码非常罕见。您的文件是一个字节数组,必须在字节级别定义。)@ DavidSchwartz:我对C或C++没有很深的了解。我只是通过做一些有形的东西来学习它。你能给我更多你说的吗?我是说,我如何为文件格式做字节级定义?而且我的代码看起来没有组织和计划(我也这么认为)。.那么,你能给出一个没有经验的程序员(学生)能理解的更具体的解释吗像我一样?这是C++,不是C固定标签。文件应该是什么格式?看起来你只是丢失了代码,把代码< E >代码>转换成文件应该输入的任何格式。你不能只把内存的内容写入文件,除非它已经以已知的格式串行化这些内容,否则它会有意义的。DavidSchwartz这是一个二进制文件,多亏了你们,我已经成功地写和读了它。所有的二进制文件都是什么格式的?你必须转换成文件应该采用的格式。(您已将代码从似乎不起作用的代码转换为似乎起作用的代码。但它仍然非常脆弱,因为它没有实现合理的文件格式——除非您没有向我们展示的代码非常罕见。您的文件是一个字节数组,必须在字节级别定义。)@ DavidSchwartz:我对C或C++没有很深的了解。我只是通过做一些有形的东西来学习它。你能给我更多你说的吗?我是说,我如何为文件格式做字节级定义?而且我的代码看起来没有组织和计划(我也这么认为)。.那么你能给出更具体的解释吗