0

私はC++にかなり慣れていないので、そのコードに少し問題があります。動的メモリ割り当てで作成する必要がある配列のすべてのセルに 1 を入れたいです。数か月前にmallocを使用してcで同様のものを作成したと思います。結果を印刷すると (g++ Linux)、最初の列 (配列の 10 セルごとを新しい列の先頭として扱う場合) のみが 1 で埋められていることが示されます。その他はメモリへのアドレスとして出力されます。

#include "stdafx.h"
#include <iostream>

class TestOfForVector {
public:
double* tabX;
double* tabY;
int n;
TestOfForVector(int getN){
    n = getN;
    tabY = new double[n*n];
    //tabX = new double[n];
    for(int i = 0; i < n; i ++ ){
        for(int j = 0; j <n; j++){
        tabY[j+i*n] = 1.0;
        std::cout<<tabY[j+i*n]<<std::endl;
        }
    }
}


~TestOfForVector(){
    delete [] tabX;
    delete [] tabY;
}
};


int main(int argc, _TCHAR* argv[])
{   
TestOfForVector newboy(10); //it will be defined by user input;
return 0;
}

おそらく些細な質問で申し訳ありませんが、インターネット上で答えが見つかりませんでした。よろしく、ルカシュ!

4

2 に答える 2

2

あなたのコードは正しく、(delete[] tabX作成コードをコメントアウトしたのであなたをコメントアウトした後)実行され、私のマシンで1の列が生成されます。

stdafx.hヘッダーがどうあるべきかわかりません- の通常の署名main(int argc, char** argv). そのため、でコンパイルする前にそのヘッダーを削除しましたg++。Linux を使用しているとのことですが、Visual Studio を使用するのは奇妙に思えますね。

于 2012-04-26T17:10:52.917 に答える
0

デストラクタで未定義の動作が発生しています:

delete [] tabX;

初期化されていないため、ポインターtabXがぶら下がっているためです。

stdafx.hそれに加えて、 Winで使用されるプリコンパイル済みヘッダーファイルであり_TCHAR、ワイド文字のMSVS定義であり、Linuxでコンパイルしていると言ったが、コードは問題ありません。

于 2012-04-26T18:09:49.370 に答える