C++ 3D转换错误,内存错误。

C++ 3D转换错误,内存错误。,c++,debugging,c++11,3d,transformation,C++,Debugging,C++11,3d,Transformation,我知道这是很多代码,对此我深表歉意,但我相信这是所有必要的代码,以了解我在做什么,并注意到问题将在哪里 void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) { for (auto sDraw : image) { sDraw->draw(gcontext, vContext); } } M3D是我想要的3D转换的合成矩阵最有可能的是,某个地方有一个

我知道这是很多代码,对此我深表歉意,但我相信这是所有必要的代码,以了解我在做什么,并注意到问题将在哪里

    void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) {
    for (auto sDraw : image) {
        sDraw->draw(gcontext, vContext);

    }
}

M3D是我想要的3D转换的合成矩阵

最有可能的是,某个地方有一个指针超出了指向的有效位置范围,并将垃圾写入了重要内容。离题:如果你以我认为你定义的方式违抗了矩阵对象,您可能会发现,通过将2D数组替换为1D数组,您的性能得到了显著提高。主题:您是否使用调试器逐步完成了绘图例程,或者使用valgrind运行了程序?Valgrind经常是发现像这样爆炸的炸弹。@user4581301我实际上不知道如何使用Valgrind,我一定要去看看
    void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) {
    for (auto sDraw : image) {
        sDraw->draw(gcontext, vContext);

    }
}
  void triangle::draw(GraphicsContext* gcontext, viewContext* vContext) {

    matrix temp(4, 1);
    matrix temp2(4, 1);
    matrix temp3(4, 1);

    temp[0][0] = origin[0][0];
    temp[1][0] = origin[1][0];
    temp[2][0] = 1;
    temp2[0][0] = origin[0][1];
    temp2[1][0] = origin[1][1];
    temp2[2][0] = 1;
    temp3[0][0] = origin[0][2];
    temp3[1][0] = origin[1][2];
    temp3[2][0] = 1;

    temp = vContext->model_to_device_3D(temp);
    temp2 = vContext->model_to_device_3D(temp2);
    temp3 = vContext->model_to_device_3D(temp3);

    //set color to color input from constructor.
    gcontext->setColor(color);
    //x1,y1,x2,y2
    gcontext->drawLine(temp[0][0], temp[1][0], temp2[0][0], temp2[1][0]);
    //x2,y2,x3,y3
    gcontext->drawLine(temp2[0][0], temp2[1][0], temp3[0][0], temp3[1][0]);
    //x3,y3,x1,y1
    gcontext->drawLine(temp3[0][0], temp3[1][0], temp[0][0], temp[1][0]);

    std::cout << "just drew a triangle" << std::endl;
}
    matrix viewContext::model_to_device_3D(const matrix& param) {
    matrix hold_values(param); //copy
    //TODO [0][2] OR [2][0]
    hold_values[0][2] = 1;

    hold_values = (M3D * hold_values);

    //TODO not sure if matrix divison works
    //may have to do 1/hold_values[3][0] then multiply that with hold_values
    double temp = 1 / hold_values[3][0];
    hold_values = hold_values * temp;

    return hold_values;
}