こんばんは。
レジストリ値の取得について教えてください。
下記のテストコードですが、これだけだとOKなのですが、いざ実際に使おうと他のソースに入れ込むと、一番最初(WinMain直後)に持ってきたとしても、「アプリケーションエラー」になってしまいます。
恐らくメモリの確保ができてないのかと思うのですがどうしたらよいのでしょうか?
環境は
OS: Windows 2000 Professional
C: Borland C++ Compiler
です。
--
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
HKEY hKey;
LPBYTE lpData;
LPDWORD lpcbData;
lpData = (LPBYTE)malloc(256);
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup", 0, KEY_QUERY_VALUE, &hKey);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, NULL, lpcbData);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, lpData, lpcbData);
RegCloseKey(hKey);
MessageBox(NULL, lpData, "lpData", MB_OK);
return 0;
}
No.2ベストアンサー
- 回答日時:
ポインタ変数 lpcbData を初期化せずに使っていますね。
DWORD cbData;
と定義して,
RegQueryValueEx(hKey, "BootDir", NULL, NULL, NULL, &cbData);
lpData = malloc(cbData);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, lpData, &cbData);
でいいと思います。
No.1
- 回答日時:
mallocの呼び出しが怪しそうです。
Application->Initialize();
のイニシャライズをしない状態だと、malloc、freeに使うヒープメモリが初期化されておらず、mallocがエラーでNULL値を返して来てるんじゃないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mallocについて
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
配列の添え字の最大数とは?
-
スタック破壊の上手な見つけ方...
-
入れ子になった構造体について
-
malloc呼び出し時のセグメンテ...
-
mallocで確保するメモリの領域...
-
LoadLibraryでAccess Violation...
-
freeで開放される範囲
-
メモリ不足になってしまう。
-
64ビットと32ビットの違い
-
gcnew arrayによるメモリ確保に...
-
free関数で動作が止まる
-
malloc、new のメモリ確保について
-
ビットをローテートするプログ...
-
newでrealloc?
-
グローバル変数のサイズ
-
stringの最大サイズ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
newしないオブジェクトについて
-
allocってなんですか?
-
スタック破壊の上手な見つけ方...
-
ヒープメモリの解放について
-
配列の添え字の最大数とは?
-
void*型のデータサイズ
-
c言語のポインタへの文字列入力...
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
指定したメモリアドレスの値の...
-
win32APIのHeapAlloc()の使い方...
-
ポインタのポインタの初期化法
-
プログラムが途中で強制終了し...
-
大容量の静的な確保の限界値
-
malloc呼び出し時のセグメンテ...
-
ヒープ領域の限界値設定
-
free関数で動作が止まる
-
stringの最大サイズ
-
64ビットと32ビットの違い
-
LPWSTRのコピー
おすすめ情報