【发布时间】:2021-09-08 20:31:39
【问题描述】:
在调试我的代码时,我注意到发生了一些奇怪的事情,所以我添加了更多行并且更加困惑:
#include <iostream>
#include <memory>
struct Node
{
size_t size = 0;
};
class MallocMetadata {
public:
size_t size; /** Effective allocation - requested size **/
bool is_free;
MallocMetadata *next;
MallocMetadata *prev;
MallocMetadata *next_free;
MallocMetadata *prev_free;
};
int main()
{
size_t size = 0;
auto node = std::make_shared<Node>();
int tmp_res=node->size - size - sizeof(MallocMetadata);
bool test=(node->size - size - sizeof(MallocMetadata)) < 128;
bool test1=tmp_res<128;
std::cout << tmp_res << "\n";
std::cout << test << "\n";
std::cout << test1 << "\n";
}
运行这 3 行后,我看到了:
tmp_res=-48
test = false
test1 = true
这怎么可能!为什么test为假,-48小于128
这是一个证明:
【问题讨论】:
-
@AlanBirtles 代码非常庞大,无法拆分。我发誓太努力了,但除非你不想看到 700 行,否则很难。
-
修改代码为:
auto tmp_res=node->size - size - sizeof(MallocMetadata); -
您不需要庞大的代码来向我们展示所涉及的变量的类型。
size是一些node的成员并不重要,但我们需要知道它的类型 -
请注意不是每个人都可以查看图像。代码应该以代码而不是图像的形式发布:meta.stackoverflow.com/questions/285551/…。我不明白为什么在关于代码的问题中询问代码会经常以讨论结束。嗯嗯。没关系。