以下代码行将unsigned int值写入文件,但文件内容不可读.
struct rabin_polynomial
{
uint64_t start;
uint16_t length;
struct rabin_polynomial *next_polynomial;
};
fprintf(out_file, "%llu,%u",poly->start,poly->length);
Run Code Online (Sandbox Code Playgroud)
如果我将代码的输出显示在命令行屏幕上,则它是可读的.
文件"out_file"未以二进制模式打开.
这里是输出文件的部分内容:
-ÍÍÍÍÍÍp\y";^æó r\ ÍÍÍÍ- ÍÍÍÍÍÍ
Øâˆ¿»Iðr\ ÍÍÍÍ- wÍÍÍÍÍÍ7OT-OØÚ‚\ ÍÍÍͤ* L ÍÍÍÍÍÍî›ùçÉç`‚\ ÍÍÍÍð3 ÍÍÍÍÍÍ
Øâˆ¿»I°‚\ ÍÍÍÍðC ÍÍÍÍÍÍíK¬è‹Ç{ ƒ\ ÍÍÍÍðS • ÍÍÍÍÍÍ-Ló3lJ–ÞPƒ\ ÍÍÍÍ…]
Run Code Online (Sandbox Code Playgroud)
这是预期的输出:
0,2861
2861,4096
6957,3959
10916,2380
13296,4096
17392,4096
Run Code Online (Sandbox Code Playgroud) 我发布了一个问题并在这里得到了答案.这是我在VC2010上调试的代码.我得到了最后显示的运行时错误.使用 sdir有什么问题?
#include<iostream>
#include<stdlib.h>
#include<windows.h>
void make_dir(int depth, char *dir) {
if (depth < 3) {
CreateDirectoryA (dir,NULL);
for (int i = 0; i < 10; i++) {
char *sdir= (char*)malloc(strlen(dir+10)); // XXX 10?
strcpy(sdir, dir);
sprintf(sdir + strlen(sdir), "\\%d", i);
printf("%s\n", sdir);
CreateDirectoryA(sdir,NULL);
make_dir(depth + 1, sdir);
free(sdir);
}
}
}
int main()
{
make_dir(0,"dir");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
HEAP [mkdir.exe]:004114E8处的堆块在00411514处修改过去请求的大小为24 Windows已在mkdir.exe中触发了断点.
这可能是由于堆的损坏,这表明mkdir.exe或其加载的任何DLL中存在错误.
这也可能是由于用户在mkdir.exe具有焦点时按下F12.
输出窗口可能包含更多诊断信息.程序'[3008] mkdir.exe:Native'已退出,代码为0(0x0).
我正在使用VC2010.我将FALSE定义为false
#define FALSE=false
Run Code Online (Sandbox Code Playgroud)
然后我试着按如下方式使用它
bool *bPtr;
if(some condition)
*bPtr=FALSE;
Run Code Online (Sandbox Code Playgroud)
编译器标记为FALSE并说"预期表达式".
我使用false而不是定义的'FALSE'并接受它.我想知道可能是什么问题.
你可能告诉我不要定义,所以不要使用FALSE.好吧,我没有用它.
我只是想知道这个问题.
我使用三维char数组实现了一个bloom过滤器(位表),它运行良好,直到达到无法再分配内存并给出bad_alloc消息的程度.在分配600MB后,它在下一个扩展请求中给出了这个错误.
布隆过滤器(阵列)预计会增长到8到10GB.
这是我用来分配(扩展)位表的代码.
unsigned char ***bit_table_=0;
unsigned int ROWS_old=5;
unsigned int EXPND_SIZE=5;
void expand_bit_table()
{
FILE *temp;
temp=fopen("chunk_temp","w+b");
//copy old content
for(int i=0;i<ROWS_old;++i)
for(int j=0;j<ROWS;++j)
fwrite(bit_table_[i][j],COLUMNS,1,temp);
fclose(temp);
//delete old table
chunk_delete_bit_table();
//create expanded bit table ==> add EXP_SIZE more rows
bit_table_=new unsigned char**[ROWS_old+EXPND_SIZE];
for(int i=0;i<ROWS_old+EXPND_SIZE;++i)
{
bit_table_[i]=new unsigned char*[ROWS];
for(int k=0;k<ROWS;++k)
bit_table_[i][k]=new unsigned char[COLUMNS];
}
//copy back old content
temp=fopen("chunk_temp","r+b");
for(int i=0;i<ROWS_old;++i)
{
fread(bit_table_[i],COLUMNS*ROWS,1,temp);
}
fclose(temp);
//set remaining content of bit_table_to 0
for(int i=ROWS_old;i<ROWS_old+EXPND_SIZE;++i)
for(int j=0;j<ROWS;++j)
for(int k=0;k<COLUMNS;++k) …Run Code Online (Sandbox Code Playgroud)