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 のような値しかありませんでした。
十分に説明できれば幸いです...必要に応じて詳細をお尋ねください。