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

Array with pointers to objects initialization

本文关键字:数组 初始化 对象 指针      更新时间:2023-10-16

我目前正在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;
}

,这是表的声明和初始化,在表的主中,contan contan contan contan contan contan pid的对象:

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

所以我想这使用了我上面创建的构造函数将PID设置为max_int。当我尝试访问表[i]的内容时,请在初始化中使用returnpid for Everything for Extive ,类似的内容:

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

当我试图访问表面外部和初始化之后的表[i]内容时,就会发生问题。我的主要崩溃,它返回一个数字(-1073741571)作为错误。似乎甚至没有从主命令执行一个命令。这是似乎重现问题的代码示例:

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的表都将正常工作。也许这与此有关,尽管我仍然看不到连接。

有人对此有任何解释吗?

看来您的堆栈空间都没有。

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

任何少于1.000.000的桌子都可以正常工作。也许是 尽管我仍然看不到 连接。

它与此有关。

我尝试了:

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

它具有与您相同的原因。

解决此问题的唯一方法是使用更少的堆栈空间。您可以在Main之外声明BEC,并且不能为此使用堆栈空间,也可以使用std :: vector。您有很多选择。

PID* table[1000000];

有您的问题。那是一个自动分配的100万指针,或[多达] 800万个字节的阵列。堆栈空间通常相当有限,您正在使用很多。当我说"有限"时,我的意思是像8KB,而不是8MB。

当您解决此问题时,结果通常不漂亮。

8MB是 lot 用于自动分配(您称为"堆栈");因此,查看调整存储机构,或考虑使用动态分配&mdash;一个不错的std::vector

btw ..具有与该类相同名称的成员变量很愚蠢。