私はアンドロイドに移植しているVisual Studioプロジェクトを持っています。関数の呼び出しは以下の通りですなぜネストされた呼び出しで引数の値が変化し、セグメント化エラーにつながる
char* format1(const char* fmt, ...) {
char* buf = new char[1030];
va_list ap;
va_start(ap, fmt);
vsprintf(buf, fmt, ap);
va_end(ap);
return buf;
}
char* format2(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
char* s = format1(fmt, ap);
va_end(ap);
return s;
}
:
char* s = format2("%*.*d", 8, 8, 9910153);
私は上記に関するクエリのカップルを持っている私は、下の機能に似た関数呼び出しでセグメンテーション違反の問題に直面しています:
「function2」の呼び出しのためにgdbのコードをステップ実行すると、次のように表示されます。 形式(fmt = 0x4) これはなぜですか?
'function1'が呼び出されると、gdbは次のように表示します。 format1(fmt = 0x15be30 "メモリ内のランダムな値") どのようにfmtの値が変更されましたか?また、fmtの値に応じて、セカンドコールがセグメンテーション違反につながります。
上記の動作を説明する助けがあれば、大歓迎です。
。 – user786653