我分配了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;
然后我甚至made sure
将其data
初始化为NULL。
unsigned long j=0;
while (j<index)
{
something[j].data = NULL;
j++;
}
这一切都很好,除非我遍历某事[],就像这样:
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 /
(UPDATE)
我获得了非NULL(not_empty)的常量初始化元素。仍然不知道为什么。 当然,空+ not_empty = index。
如果我在构造函数中注释掉data = NULL;
,如果i在分配后立即循环遍历数组,我会得到正确的空/ not_empty数。但是,在强制指向NULL之后,我再次循环遍历数组后得到相同的常量not_empty值。
我还使用malloc()对普通指针进行了重新设计,并没有区别,除了它首先是我注意到指针是正确的(空),直到我设置它们。
我用较小的[index]值(5,500,000,000)进行了一些测试,我无法复制这种行为。
我使用谷歌的ltcmalloc和分配的内存大小建议,它使用正确的[索引]大小;
答案 0 :(得分:0)