2012-02-29 18 views
0

グラフィックエンジン用のコードがあり、ワイヤフレームと線画を描画する必要があります。オリジナルのコードを調整してエラーを二重にするか、破損しますが、コードが正常に機能する前に、annybodyは私が間違っていることを知っていますか?読み込み先で倍精度浮動小数点または破損エラーC++

void Wireframe::Generate(list<eye_point> &points, list<line> &lines, const ini::Configuration &configuration) 
{ 
    string buffer; 
    stringstream out; 
    for(int i = 0; i < nrFigures; i++) 
    { 
     figure = "Figure"; 
     out<<i; 
     buffer = out.str(); 
     figure.append(buffer); 
     out.str(string()); 
     cout<<"de figure heeft de naam "<<figure<<endl; 
     Read_info(configuration); 
     Generate_points(points, configuration); 
     Generate_lines(lines, configuration); 
    } 
} 

彼は情報を読み込み、iniファイルから

void Wireframe::Generate_points(list<eye_point> &points, const ini::Configuration &configuration){ 
    Matrix schaal = Scale(scale); 
    Matrix translate = Translatie(center); 
    Matrix xrotate = Rotate_x_as(rotatex); 
    Matrix yrotate = Rotate_y_as(rotatey); 
    Matrix zrotate = Rotate_z_as(rotatez); 
    Matrix eyematrix = Eye_transformatie(eye); 
    Matrix matrix; 
    matrix = schaal * translate * xrotate * yrotate * zrotate * eyematrix; 
    if(type.compare("LineDrawing") == 0) 
    { 
     linedrawing_point(points, configuration, matrix); 
    } 
    else if(type.compare("Cube") == 0) 
    { 
     cube_point(points,matrix); 
    } 
} 

void Wireframe::Generate_lines(list<line> &lines, const ini::Configuration &configuration){ 
    if(type.compare("LineDrawing") == 0) 
    { 
     linedrawing_lines(lines, configuration); 
    } 
    else if (type.compare("Cube") == 0) 
    { 
     cube_lines(lines); 
    } 
} 

ここで彼は彼が行う必要がある線画のためのWHAを見て、線画でいただけで正常に動作し、エラーが立方体であります。

void Wireframe::cube_lines(list<line> &lines){ 
    getline(lines, 1, 5); 
    getline(lines, 5, 3); 
    getline(lines, 3, 7); 
    getline(lines, 7, 1); 
    getline(lines, 5, 2); 
    getline(lines, 2, 8); 
    getline(lines, 8, 3); 
    getline(lines, 3, 5); 
    getline(lines, 2, 6); 
    getline(lines, 6, 4); 
    getline(lines, 4, 8); 
    getline(lines, 8, 2); 
    getline(lines, 6, 1); 
    getline(lines, 1, 7); 
    getline(lines, 7, 4); 
    getline(lines, 4, 6); 
    getline(lines, 7, 3); 
    getline(lines, 3, 8); 
    getline(lines, 8, 4); 
    getline(lines, 4, 7); 
    getline(lines, 1, 6); 
    getline(lines, 6, 2); 
    getline(lines, 2, 5); 
    getline(lines, 5, 1); 
} 



void Wireframe::cube_point(list<eye_point> &points, Matrix &matrix){ 
    getpoint(1, -1, -1, points, 1, matrix); 
    getpoint(-1, 1, -1, points, 2, matrix); 
    getpoint(1, 1, 1, points, 3, matrix); 
    getpoint(-1, -1, 1, points, 4, matrix); 
    getpoint(1, 1, -1, points, 5, matrix); 
    getpoint(-1, -1, -1, points, 6, matrix); 
    getpoint(1, -1, 1, points, 7, matrix); 
    getpoint(-1, 1, 1, points, 1, matrix); 
} 

void Wireframe::projectie(Vector3D &vector_points, eye_point &point_element){ 
    point_element.z = vector_points.z; 
    if(vector_points.z != 0) 
    { 
     point_element.x = vector_points.x/-vector_points.z; 
     point_element.y = vector_points.y/-vector_points.z; 
    } 
    else 
    { 
     point_element.x = vector_points.x; 
     point_element.y = vector_points.y; 
    } 

} 

void Wireframe::getpoint(double x, double y, double z, list<eye_point> &points, int nummer, Matrix &matrix){ 
    eye_point point_element; 
    Vector3D vector_points = Vector3D::point(x, y, z); 
    vector_points *= matrix; 
    point_element.figure = figure; 
    point_element.punt = nummer; 
    projectie(vector_points, point_element); 
    points.push_back(point_element); 
} 

void Wireframe::getline(list<line> &lines, int lijn0, int lijn1){ 
    line line_element; 
    line_element.lijn0 = lijn0; 
    line_element.lijn1 = lijn1; 
    line_element.figure = figure; 
    line_element.linecolor = linecolor; 
    lines.push_back(line_element); 
} 
+3

質問を編集して、問題が発生しているスタックトレースまたは行番号を含めることはできますか。それはWebブラウザでデバッグしようとする__lot__のコードです...... – talonmies

+1

'valgrind'や同様のツールの下でコードを実行してください。 (バグはあなたの 'line'クラスにあると考えられますが、おそらくルール3(http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29)違反です。) –

+0

実際には、あなたが 'push_back'に渡すどのクラスにあってもかまいません。ほとんどの場合、あなたが変更しているクラスがあります。デストラクタ 'free'のポインタがあれば、コピーコンストラクタと代入演算子がメンバごとのコピーを行わないようにしてください! (それ以外の場合は、 'push_back'で作成したコピーを破棄すると2倍の空きができます)。 –

答えて

0

コードが掲載さ二重解放エラーを検出するように設計されたツールが直接ので、任意の割り当てや解放を行いませんAppVerifierのしようとする場合がありますあなたのバグとは関係ありません。

コンテナに入れているオブジェクト(lineおよびeye_point)にはバグがある可能性があります。たとえば、代入演算子やコピーコンストラクタがないと、さまざまな妨害行為が発生する可能性があります。

関連する問題