2
int fromVectoEigen(vector<string> & source, double ** & array, int & n)
{  
    cout<<"n:"<<n<<'\n';
    int counter = 0;

    for (int j = n-1 ; j >= 0 ; j--) // iterate through each line
    {
        string mystring = source.back(); // take last line

        counter++;
        char * str = new char [mystring.length()+1];
        std::strcpy (str, mystring.c_str()); // copy string to char array
        char * pch; // pointer to tokens
        pch = strtok (str," ,-");
        for( int i = 0 ; i<3 ; i++) // dismiss first 3 columns
        {

            pch = strtok (NULL, " ,-");
        }

        for (int i= 0 ; i<n ; i++)
        {
            double val = atof(pch); // cast char to double

            //array[j][i]= val;
            //cout<<array[j][i]<<'\t';
            //pch = strtok (NULL, " ,-");
        }
        //
        //source.pop_back();

        }

    return 0;
}

おい!

この関数を使用して、ファイルから 2 次元配列に行列を読み込みたいと思います。行列には、列と同じ数の行があります。そして、strtokで行をスペースで分割したい。行はすでに別の関数でベクトルに読み込まれています(これは機能しました-テスト済み)。だから私は問題を知りません.4列4行の小さなマトリックスでこれを実行しようとしたため、完全に機能しました! ここで、1000 行以上と同じ数の列を持つ大きな行列で試してみました。valgrind から次のエラー メッセージが表示されます。

サイズ 1 ==26501== 0x58A87AB の無効な読み取り: _ _strtod_l_internal (strtod_l.c:538) ==26501== by 0x4015BB: fromVectoEigen(std::vector >&, double**&, int&) (topo.cpp :70) ==26501== by 0x40362B: main (main.cpp:36) ==26501== アドレス 0x0 は、スタック、malloc、または (最近) 解放されていません

コメント/コメント解除の方法を試してみましたが、atof を使用するところまではすべて正常に機能します....これは、小さなマトリックスで正常に機能した原因がわかりません

大きなマトリックスの値は次のようになります: 0.11991517 小さなテスト マトリックスと同様に、0 または 0.1 のような値しかありませんでした。

十分に説明できれば幸いです...必要に応じて詳細をお尋ねください。

4

2 に答える 2