带有指向对象初始化指针的数组

时间:2012-11-05 00:40:13

标签: c++ arrays class pointers

我目前正在使用C ++,我正面临着这一挑战。以下是头文件中我的类的代码:

class PID
{
   private:
   int PID;
   int total;

   public:
   PID(); // Constructor
   int returnPID(); // Returns PID.
};

这是cpp文件中的代码声明:

PID::PID()
{
    PID=INT_MAX;
    total=0;
}

int PID::returnPID()
{
    return PID;
}

这是表格的主要声明和初始化,包含指向PID类对象的指针:

PID* table[1000000];

for (int i=0; i<1000000; i++)
{
    table[i]=new PID;
}

所以我想这使用我上面创建的构造函数将PID设置为MAX_INT。 当我尝试在初始化时使用returnPID访问table [i] .PID的内容时,一切都很棒,如下所示:

for (int i=0; i<1000000; i++)
{
    table[i]=new PID;
    int display=table[i]->returnPID();
    cout<<display<<endl;
}

当我尝试访问外部和初始化后的表[i]内容时,会出现问题。我的主要崩溃并返回一个数字(-1073741571)作为错误。似乎甚至没有来自main的一个命令被执行。以下是似乎重现问题的代码示例:

for (int i=0; i<1000000; i++)
{
    table[i]=new PID;
}
for (int i=0; i<1000000; i++)
{
    int display=table[i]->returnPID();
    cout<<display<<endl;
}

我一直在研究这个问题超过两个小时而没有找到任何解决方案,这似乎不符合逻辑。有人对此有任何解释吗?

编辑:任何小于1.000.000点的表都能正常工作。也许它与此有关,虽然我仍然没有看到连接。

2 个答案:

答案 0 :(得分:3)

  

有人对此有任何解释吗?

好像你的堆栈空间不足了。

您的编译器可以处理一百万个整数,而不是一百万个PID *?

  

任何小于1.000.000点的表都能正常工作。也许吧   与此有关虽然我仍然没有看到   连接。

它与此有关。

我试过了:

int main(){
    int bec[10000000];
    for (int i=0; i<10000000;i++){
        bec[i] = i;
    }
    printf("%d\n",rand()%1000);
    return 0;

}

它出于与你相同的原因发生了段错误。

解决此问题的唯一方法是使用更少的堆栈空间。您可以在main之外声明bec而不使用堆栈空间,或者您可以使用std :: vector。你有很多选择。

答案 1 :(得分:0)

PID* table[1000000];

有你的问题。这是一个自动分配的1,000,000个指针数组,或者[最多] 800万个字节。堆栈空间通常相当有限,而且您正在使用它。当我说“有限”时,我的意思是8KB,而不是8MB。

当你回顾一下时,通常会得到结果are not pretty

8MB是 lot 用于自动分配(你可以在堆栈上调用“);那么,考虑调整存储机制,或考虑使用动态分配 - 一个不错的std::vector怎么样?

BTW ..拥有一个与其所在类同名的成员变量是愚蠢的。