小编Joh*_*ohn的帖子

为什么输出文件损坏/充满垃圾?(期待数字)

以下代码行将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)

c io printf

1
推荐指数
1
解决办法
1175
查看次数

堆下面的代码腐败怎么办?

我发布了一个问题并在这里得到了答案.这是我在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).

c recursion create-directory heap-corruption

1
推荐指数
1
解决办法
606
查看次数

以下C代码有什么问题

我正在使用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.好吧,我没有用它.

我只是想知道这个问题.

c boolean visual-studio-2010 c-preprocessor

0
推荐指数
2
解决办法
95
查看次数

为什么600MB后动态内存分配失败?

我使用三维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)

c++ bitarray bad-alloc dynamic-arrays

0
推荐指数
1
解决办法
1742
查看次数