0

ループ内の double 配列に異なる変数値を代入しようとしましたが、配列全体の値は 1 つだけです

double *float_array;
float_array = new double [dynamic_variable]; // debugger does tell me its size     
stringstream ss1(line);

string s1;
string s2 = "2.1";
double test= atof(s2.c_str());
while (getline(ss1,s1,','))
{
    float_array[count] = atof(s1.c_str());
    count++;
}
count = 0;
root->data = float_array;
root->next = new node;

いくつかのコードを表示する

class node
{

public:
     double * data;
    node *next;
    node(void);
    ~node(void);
};

int _tmain(int argc, _TCHAR* argv[])
{
    double arr[4]= {0.689997};
    double * float_array;
    string file_name; 
    string line,token;
    string path= "D:\\DM\\Assignment No. 1\\";
    cin>>file_name;
     file_name= path + file_name;
     ifstream aa;
     aa.open(file_name,ios::in|ios::out);
     node *root; int float_arr_size=0;int count=0;
     //aa.open(file_name,ios::in|ios::out);
     if(aa.is_open())
     {

        while(!aa.eof())
        {
            aa>>line;
            cout<<line<<endl;
            cout<<endl;
            stringstream ss(line);
            string s;

            while (getline(ss, s, ','))
            {
            float_arr_size++;
            }

            float_array= new double[float_arr_size];
            s="";

            stringstream ss1(line);
            string s1;
            string s2= "2.1";
            double test= atof(s2.c_str());
            while(getline(ss1,s1,','))
            {
                float_array[count] =  atof(s1.c_str());
                count++;
            }
            count = 0;
            root->data =float_array;
            root->next= new node;
        }
     }
    aa.close();

    return 0;
}

テスト変数で完全な変換が得られます。で「2.1」も取得s1しますが、デバッガーでは、float_array で 5.0999945 の値を 1 つだけ取得します。これ以上の値を持つインデックスはありません。テスト変数の値を正しく変換した後、動的配列に問題があります。

解決策はありますか?

4

3 に答える 3

1

配列全体が表示されないデバッガーに関するコメントに加えて、C/C++ のビジュアル スタジオ デバッガーでは、次のようなウォッチを追加できます。

float_array,30

これにより、配列の 30 個の要素が表示されます。これは動的ではないことに注意してください。長さ != 30 の配列の 30 個の要素が喜んで表示されるため、別の方法で配列の長さを知り、必要に応じてウォッチを変更する必要があります。より「使いやすい」デバッガーの動作が必要な場合は、std::vector を使用できます。実際、手動のメモリ管理を本当に楽しんでいない限り、とにかく std::vector を使用する必要があります。

編集:OK、コメントに「割り当て」という単語があることに気付いたので、手動のメモリ管理を使用することを余儀なくされている可能性があります:)

于 2012-02-24T08:47:40.467 に答える
0

さて、あなたのコードで私が見る唯一の問題は、float_arrayに入れたアイテムの量を決して保存しないということです。そのため、後でそれをどのように決定できるかわかりません。

ポインターがC++で機能する方法のため、ほとんどのデバッガーは、double *を要求されたときに、配列の最初の項目のみを表示します。実際、デバッガーがそのポインターが単一のアイテムを指しているのか配列を指しているのか(そしてそれが動的に作成された配列の場合は、それが構成されているアイテムの数)を知る方法はありません...そしてそれは私が経験したことですVisualStudioおよびEclipseCDTデバッガーを使用します。ただし、データはそこにあるはずです。float_array[1]またはfloat_array [2]に値を入力(またはコンソールに出力)してみてください。

于 2012-02-24T05:47:46.603 に答える