ユーザー空間でプログラムをデバッグしていて、SIGSEGV
for と思われる for a ポインターを受け取っています0xffffffff
。
0xffffffff
有効なポインタアドレスかどうか知りたい??
私はGDBを使用しました.以下はコードのリストです:
1414
1415 /* convert object handle */
1416 file = (PSLhandle_t*)hFile;
1417
1418 /* param check */
1419 if(file->hobject.fdesc == 0) <----------------- it may be crashing here
1420 return INVALID_SET_FILE_POINTER;
----------------- during debugging---------------------------
1412 if((hFile == NULL) || (lpBuffer == NULL))
(gdb) s
1419 if(file->hobject.fdesc == 0)
(gdb) print file
No symbol "file" in current context.
(gdb) print hFile
$1 = (HANDLE) 0xffffffff
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
WriteFile (hFile=0xffffffff, lpBuffer=0xb7f69294, nNumberOfBytesToWrite=65516, lpNumberOfBytesWritten=0xb3933238,
lpOverlapped=0x0) at PSLWinWrapper.c:1419
1419 if(file->hobject.fdesc == 0)
Linux を使用しています。
[root@DellB アプリ]# uname -a Linux DellB 2.6.23.1-42.fc8 #1 SMP 2007 i686 i686 i386 GNU/Linux
については既に確認済みですNULL
。
/* param check */
if((hFile == NULL) || (lpBuffer == NULL)) <-------- CHECKED ALREADY FOR NULL
return INVALID_SET_FILE_POINTER;
/* convert object handle */
file = (PSLhandle_t*)hFile;
/* param check */
if(file->hobject.fdesc == 0) <-------------- CRASH HERE
return INVALID_SET_FILE_POINTER;
0xffffffff
有効なポインタアドレスかどうか知りたいですか? ユーザー空間のLINUXでポインターが有効であることを検証できるAPIはありますか。