QTプロジェクトでGMPを使用しており、QByteArrayを使用していくつかの数値を保存しようとしています。
バイト配列をmpz_tに変換したいときは、次のことを行っています。
const char *hexstring = qbyteval.toHex().toStdString().c_str();
mpz_t myval;
mpz_init (myval);
mpz_set_str(myval, hexstring, 16);
mpz_t zero;
mpz_init(zero);
mpz_set_str(zero, "0", 10);
if(mpz_comp(myval, zero) == 0) {
//...set a breakpoint or do something here. This line shouldn't be reached ever.
}
私の場合、qbyteval
は決してゼロではありません。そのmpz_compifブロック内にブレークポイントを設定した場合、qbyteval.toHex()は常に16進文字列のままです。
何が失敗しているのでしょうか。つまり、hexstringが空の文字列(したがってmyval = 0)になるのでしょうか。
これは間違っているように見えます:
const char *hexstring = qbyteval.toHex().toStdString().c_str();
このc_str()
関数は、の内部データへのポインターを返します。このstd::string
ポインターは、を変更または破棄すると無効になる可能性がありstd::string
ます。この場合、std::string
変数に格納しなかったため、その行が実行された直後にが破棄されます。
コードにはこのようなエラーがさらにある可能性がありますが、それが最も明白なエラーです。それでも問題が解決しない場合は、最小限の完全な例を投稿し、予想される動作と実際の動作をより適切に説明し、デバッガーを使用してすべての行で何が起こっているかを確認することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加