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 构造函数不会 运行 并且 test1test2 数组不会被正确初始化。

而是使用 new:

TestS *struct_instance = new TestS;

您应该永远不要使用malloc分配和键入 C++ class 或包含 C++ class 的类型。