GetStringUTFCharsがコピーを返した場合、ReleaseStringUTFCharsを呼び出すべきですか?
2023-08-30 13:49:15
質問
Rob Gordon著「Essential JNI: Java Native Interface"」には、jstringをC言語の文字列に変換する次のようなコード例があります。
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
を呼び出すだけであることに注意してください。
ReleaseStringUTFChars
もし
isCopy
が真であれば
しかし、この本は
Java Native Interface: プログラマーズ・ガイドと仕様書
(代替リンクです。
http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
)に書いてあります。
ReleaseString-Charsの呼び出しは GetStringCharsが が *isCopy を JNI_TRUE または JNI_FALSE に設定しているかどうかに関係なく必要です。 ReleaseStringCharsは、コピーを解放するか、インスタンスをアンインストールするかのどちらかです。 コピーを解放するか、インスタンスをアンインストールします。 ReleaseStringCharsは、GetStringCharsがコピーを返したかどうかに応じて、コピーを解放するかインスタンスをアンインストールします。 がコピーを返したかどうかに応じて、コピーを解放するかインスタンスをアンインストールします。
これはGordonの本のバグだと考えていいのでしょうか?
どのように解決するのですか?
はい、あなたの仮定は正しいです(常にReleaseStringUTFCharsを呼び出す必要があります)。
関連
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
無効な文字定数
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
-
[解決済み] Javaでオブジェクトをコピーするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
無効な文字定数
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
コンストラクタDate()が未定義である問題
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] jstring(JNI) から std::string(c++) へ utf8 文字で変換する。