我目前正在使用 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/