C++ 运行时错误 0xC0000005 由对象内部结构引起
C++ Runtime Error 0xC0000005 Caused By Object Inside Struct
在处理 C++ 项目时,出现运行时错误 (0xC0000005)。我设法找到了问题并将其封装在下面的代码中。
#include <iostream>
using namespace std;
class TestC{
public:
string test1[20];
string test2[10];
void initArrays(){
cout << "init start\n";
for(int i=0;i<20;i++){
cout << i << endl;
this->test1[i] = "initialized";
}
cout << "first for complete\n";
for(int i=0;i<10;i++)
this->test2[i] = "initialized";
cout << "init finished\n";
}
};
struct TestS{
int anint;
int anotherint;
TestC obj;
};
int main(){
cout<<"Check :\n";
struct TestS *struct_instance = (struct TestS*) malloc(sizeof(struct TestS));
struct_instance->obj.initArrays();
cout<<"Ok Struct";
return 0;
}
基本上只有在通过位于 struct TestS
.
中的 TestC
对象调用 initArrays()
时才会抛出错误
如果从 main()
中创建的对象调用 initArrays()
,如下所示,一切正常。
int main(){
TestC classObj;
classObj.initArrays();
}
尽管能够定位到问题,但一直未能修复。
有谁知道怎么做的吗?
我正在使用 Code::Blocks IDE
注意: 在 main()
中创建 TestC
对象并仅在结构中维护指向它的指针,这不是实际的合适解决方案项目。
您正在使用 malloc
分配包含 class、TestC
的结构。这意味着 TestC
构造函数不会 运行 并且 test1
和 test2
数组不会被正确初始化。
而是使用 new
:
TestS *struct_instance = new TestS;
您应该永远不要使用malloc
分配和键入 C++ class 或包含 C++ class 的类型。
在处理 C++ 项目时,出现运行时错误 (0xC0000005)。我设法找到了问题并将其封装在下面的代码中。
#include <iostream>
using namespace std;
class TestC{
public:
string test1[20];
string test2[10];
void initArrays(){
cout << "init start\n";
for(int i=0;i<20;i++){
cout << i << endl;
this->test1[i] = "initialized";
}
cout << "first for complete\n";
for(int i=0;i<10;i++)
this->test2[i] = "initialized";
cout << "init finished\n";
}
};
struct TestS{
int anint;
int anotherint;
TestC obj;
};
int main(){
cout<<"Check :\n";
struct TestS *struct_instance = (struct TestS*) malloc(sizeof(struct TestS));
struct_instance->obj.initArrays();
cout<<"Ok Struct";
return 0;
}
基本上只有在通过位于 struct TestS
.
TestC
对象调用 initArrays()
时才会抛出错误
如果从 main()
中创建的对象调用 initArrays()
,如下所示,一切正常。
int main(){
TestC classObj;
classObj.initArrays();
}
尽管能够定位到问题,但一直未能修复。
有谁知道怎么做的吗?
我正在使用 Code::Blocks IDE
注意: 在 main()
中创建 TestC
对象并仅在结构中维护指向它的指针,这不是实际的合适解决方案项目。
您正在使用 malloc
分配包含 class、TestC
的结构。这意味着 TestC
构造函数不会 运行 并且 test1
和 test2
数组不会被正确初始化。
而是使用 new
:
TestS *struct_instance = new TestS;
您应该永远不要使用malloc
分配和键入 C++ class 或包含 C++ class 的类型。