带有指针对象初始化的数组
Array with pointers to objects initialization
我目前正在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 ..具有与该类相同名称的成员变量很愚蠢。
- C++使用整数的压缩数组初始化对象
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- 运行时C++数组初始化问题
- 使用带有参数包的数组的成员数组初始化类
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- C++ 2 个指针数组初始化 C2440
- C++结构字符数组初始化
- C++中的多维数组初始化
- constexpr数组初始化
- C++引物动态数组初始化程序的数目超过大小
- 使用std::index_sequence对std::数组初始化进行包扩展
- 当 std 数组初始化太小时,C++会引发错误吗?
- 如何确定结构数组初始化的大小?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 此代码中的数组初始化样式是什么?这是标准的吗?
- C++ 使用数组初始化时的 STL 向量内存管理