我目前正在使用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点的表都能正常工作。也许它与此有关,虽然我仍然没有看到连接。
答案 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 ..拥有一个与其所在类同名的成员变量是愚蠢的。