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

标签 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 访问表 [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 个点的 table 都可以正常工作。也许它与此有关,尽管我仍然看不到它们之间的联系。

最佳答案

Anyone have any explanation for this?

您的堆栈空间似乎用完了。

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

Any table with less than 1.000.000 spots will work correctly. Maybe it has something to do with this although I still don't see the connection.

这一切都与此有关。

我试过这个:

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。您有很多选择。

关于c++ - 带有指向对象初始化的指针的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224548/

相关文章:

c++ - 删除空指针

c++ - 指针和数组上 operator[] 的索引参数类型

Javascript 映射然后过滤唯一的数组项

java - "Non-static variable this cannot be referenced from a static context"当我尝试实例化一个对象时 - 为什么?

android - 使用 fragment 时应用程序崩溃

c++ - 如何使用 Teamcenter C++ API 提取标记关系?

c++ - 调试注释和 C/C++ 宏

php - 根据父 ID 值将数组从一维转换为多维

c# - 固定长度的 BitArrays 数组

c++ - 错误 : 'A' is an inaccessible base of 'B'