繁体   English   中英

为什么我的计数的 output 会根据我是否使用 std::cout 而变化?

[英]Why does the output of my count change depending on whether or not I utilize std::cout?

我觉得我快疯了。 我正在尝试测试我正在实现的用于跟踪 memory 中的帧的 bitmap 的逻辑。

int main(){
unsigned char mask = 192; //1100 0000
unsigned char* bitmap;
bitmap[0] = 0x80;
bitmap[1] = 0xC8;
bitmap[2] = 0x2F;
bitmap[3] = 0x0;
int num_frames = 16;
int frame_size_in_bits = 2;
int desired_hole = 0;
int hole_counter = 0;
for(int i = 0; i < 4; ++i){
    for(int j = 0; j < 4; ++j){
        if((mask & bitmap[i]) == mask){
            //std::cout << std::hex << int(mask) << " " << std::hex << int(bitmap[i]) << std::endl;
            hole_counter++;
        }
        mask = mask/4;
    }
    mask = 192;
}
std::cout << "Num holes: " << hole_counter << std::endl; }

我正在尝试检查 bitmap 的每个字节中出现 11 的次数。 我已将 11 指定为免费分配。 我用掩码检查字节,将掩码向右移动两次,然后重复。 我已经用 3 个“洞”填充了 bitmap,其中 11 个出现并满足了我的搜索。

但是,当我在注释掉 std::cout 行的情况下运行此代码时,我发现孔的数量为零。 我在想“好吧,我的逻辑是错误的”。

但是当我启用评论时,我得到了我想要的 output。

有谁知道为什么禁用/启用此注释会在代码执行期间更改hole_counter 的值? 这让我摸不着头脑。

谢谢!

您从未将 memory 分配给“char* 位图”

在 C 你可以这样做

char *bitmap= NULL;  /* declare a pointer, and initialize to NULL */

bitmap= malloc (5 * sizeof *bitmap);

在 C++

unsigned char* bitmap= new unsigned char[4];
int main(){
unsigned char mask = 192; //1100 0000
unsigned char* bitmap= new unsigned char[4];
bitmap[0] = 0x80;
bitmap[1] = 0xC8;
bitmap[2] = 0x2F;
bitmap[3] = 0x0;
int num_frames = 16;
int frame_size_in_bits = 2;
int desired_hole = 0;
int hole_counter = 0;
for(int i = 0; i < 4; ++i){
    for(int j = 0; j < 4; ++j){
        if((mask & bitmap[i]) == mask){
            //std::cout << std::hex << int(mask) << " " << std::hex << int(bitmap[i]) << std::endl;
            hole_counter++;
        }
        mask = mask/4;
    }
    mask = 192;
}
std::cout << "Num holes: " << hole_counter << std::endl; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM