gpt4 book ai didi

c++ - C、大指针数组分配(linux 64位)

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:13 25 4
gpt4 key购买 nike

我分配了 25,000,000,000 个单位:

struct test
{
public:
test();
void insert(unsigned int var1, unsigned int var2, unsigned long var3);
bool isEmpty() const;
unsigned char * data;
};


test::test()
{
data = NULL;
}

bool test::isEmpty() const
{
return (data == NULL);
}


unsigned long index = 25000000000;

像这样:

test *something = new (nothrow) test[index];
if (!something)
{
cout << "Error allocating memory for [something]" << endl;
return ;
}
cout << "DONE !" << endl;

然后我什至确保数据初始化为NULL。

unsigned long j=0;
while (j<index)
{
something[j].data = NULL;
j++;
}

这一切都很好,除了当我迭代something[]时,就像这样:

test *chk;
unsigned long empty = 0;
unsigned long not_empty = 0;
unsigned long i=0;
for (i=0; i< index; i++ )
{
chk = &something[i];
if (!chk->isEmpty())
{
not_empty++;
} else
empty++;
}


cout << "Empty [" << empty << "]" << endl;
cout << "Not Empty [" << not_empty << "]" << endl;
cout << "Total [" << empty + not_empty << "]" << endl;

(最后更新)

原来是硬件问题——内存。有些棍子不能与其他棍子一起正常工作。感谢大家的建议,太糟糕了,硬件路径不在答案中 o/

(更新)

我得到了恒定数量的非 NULL (not_empty) 的初始化元素。还是不知道为什么。当然,empty + not_empty = index。

如果我在构造函数中注释掉data = NULL;,如果我在分配数组后立即循环遍历数组,我会得到正确的空/非空数字。但是,在强制指针指向 NULL 后,再次循环数组后,我得到相同的常量 not_empty 值。

我还使用 malloc() 将其重新设计为普通指针,这没有什么区别,除了这是我第一次注意到指针是正确的(空),直到我设置它们。

我用较小的[索引]值(5,500,000,000)做了一些测试,但无法复制该行为。

我使用谷歌的 ltcmalloc 和分配的内存大小表明,它使用正确的[索引]大小;

最佳答案

不要写 25000000000,而是写 25000000000ul。我怀疑你的数字变成了 32 位整数,因此 j < 25000000000 始终为 true,因为 int(25000000000) = -769803776。

关于c++ - C、大指针数组分配(linux 64位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com