如何处理在C++中的类之间传递运行时大小的数组

mja*_*mes 1 c++ memory arrays

现在我有一个简单的类来处理将XML文件解析为对我有用的int.看起来像这样:

int* DataParser::getInts(){
    *objectNumbers = new int[getSize()];
    for (int i=0;i<getSize();i++){
            objectNumbers[i]=activeNode->GetNextChild()->GetContent();
    }
    return objectNumbers;
 }
Run Code Online (Sandbox Code Playgroud)

在该计划的主要部分,我通过以下方式收到:

int* numbers= data->getInts();
///Do things to numbers[]
delete numbers;
Run Code Online (Sandbox Code Playgroud)

一切正常,直到删除命令,崩溃一切.这样做的正确方法是什么?

Jar*_*Par 9

部分问题在于您没有将new []与delete []配对.这可能不是你的错误的根源,但你应该进入这样做的习惯.

该错误几乎肯定与您留下注释掉的代码有关.你能在那里添加一些更多的上下文,这样我们就可以看到你在使用数字值做什么了吗?

一般来说,我发现使用向量来解决这类问题容易得多.它将内存管理排除在外,并具有使用动态内存存储大小的额外好处.

void DataParser::getInts(std::vector<int>& objectNumbers){
    for (int i=0;i<getSize();i++){
      objectNumbers.push_back(activeNode->GetNextChild()->GetContent());
    }
 }

...
std::vector<int> numbers;
data.getInts(numbers);
Run Code Online (Sandbox Code Playgroud)