2012-04-26 9 views
0

私はC++には新しく、そのコードに少し問題があります。動的メモリ割り当てで作成する必要がある配列の各セルに1を入れたいと思います。私は数ヶ月前にmallocを使って同様のことをしたと思います。結果(g ++ Linux)を出力すると、最初のカラム(配列の10番目のセルを新しいカラムの始めとして扱うとき)のみが1であることが示されます。他はメモリへのアドレスとして印刷されます。C++のarrayとforループへのポインタ。

#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; 
} 

申し訳ありませんが、私はインターネットで回答を見つけることができませんでした。 よろしくお願いいたします。 ルカッズ!

+2

#include を使用し、配列の代わりにstd :: vector を使用します。 – andre

+1

結果を再現できません:http://ideone.com/VgIqt - 実行しているコードと同じですか? –

答えて

2

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

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

+0

あなたは正しいです。 'stdafx.h'はMicrosoft主義です。 – thb

0

あなたはデストラクタで未定義の動作に実行している:

delete [] tabX; 

それが初期化されていないとして、ポインタtabXがぶら下がっているので。そのほかに

stdafx.hが勝つ下で使用プリコンパイル済みヘッダーファイルで、_TCHARはMSVSがワイド文字のために定義され、あなたがLinuxでコンパイルしていると述べたが、あなたのコードは、罰金です。

関連する問題