STLベクトルの内容をC文字列として返す関数vect_dbg(vector<int>)
をテスト中ですので、gdb output vect_dbg(test)
で呼び出すか、ウォッチ。ローカルスコープからstd :: vectorへのgdb関数の呼び出しでエラーが発生する
#include<vector>
using namespace std;
int main()
{
vector<int> test; //breakpoint; output vect_dbg(test) ends debugging.
for (int i=0;i<=10;i++) test.push_back(i);
return 0;
}
#include<sstream>
const char* vect_dbg(const vector<int> &V)
{
stringstream ss;
for (int i=0;i<V.size();i++)
ss<<"V["<<i<<"]:"<<V[i]<<' ;'; //line 16
static char sEnu[256];
ss.getline(sEnu,256);
return sEnu;
}
残念ながら、output vect_dbg(test)
はデバッグを中断します。
デバッグ中のプログラムは、GDBの という関数で通知されました。 GDBは、コールの前の状態にコンテキストを復元しました。 この動作を変更するには、 "set unwindonsignal off"を使用してください。関数(vect_dbg(std :: vector> const &)を含む式 の評価は中止されます)。受け取ったプログラムは、 シグナルSIGSEGV、セグメンテーションフォルトです。 main.cppにでvect_dbg (V = @ 0x22ff34)で0x004014b1は:16
私はtest
グローバル作る場合、この関数が機能することを発見した、しかし、私は、ローカルに定義されたベクトルのための解決策を見つけ出すことができませんでした。どうすればこの問題を解決できますか?どうもありがとう。
EDIT:主に解決された答えはかなり明白でした。ベクターはブレークポイントで初期化されませんでした。今私はそれがvect_dbg
でそれを検出することが可能かどうか疑問に思っています。 私が見つけた別の方法は、vector<int>
を静的と宣言することです。
あなたの言っていることを理解するまでには1分ほどかかりました。ブレークポイントがヒットしたときに、 'test'のコンストラクタはまだ実行されていません。 –
あなたは正しいです、ありがとう。それは私が最初に試したことだったことを覚えているので変だ。 – algotroll