從我的memcpy中得到一個seg錯誤,gdb無法給我任何其他東西(至少超出了我知道如何使用gdb的簡單方式......)。這件事使用Berkely DB深入嵌入了一些代碼;我已經拿出了任何應用的唯一線路。memcpy Seg故障看起來很不可思議
void *databuf;
int smallest;
databuf=malloc(2*sizeof(int));
memset(databuf,0,2*sizeof(int));
/* This next line comes from the DB structures; key.data is a void*... */
smallest=*(int *)key.data;
memcpy(databuf,(void *)smallest,sizeof(int));
要確認變量最小的是正確的,我可以運行GDB,並得到
(gdb) print smallest
$1 = 120321
我收到(在GDB)的錯誤是我的沒用
Program received signal SIGSEGV, Segmentation fault.
0x08048efa in main (argc=4, argv=0xbffff344) at index_DB-1.1.c:128
128 memcpy(databuf,(void *)smallest,sizeof(int));
(gdb) backtrace
#0 0x08048efa in main (argc=4, argv=0xbffff344) at index_DB-1.1.c:128
原因這樣做主要是因爲我是混蛋伯克利DB教程,但後來我也想做
memcpy(databuf+len,(void *)largest,sizeof(int));
即有一個void指針databuf,其中第一個是最小的整數,第二個是最大的整數。我錯過了什麼?
事實上,你認爲錯誤信息是「無用的」是一個很大的線索,你失去了什麼。換句話說,您錯過了錯誤信息實際提供給您的信息。 :) – unwind
哈哈,我正在考慮口語意義上的「無用」這個詞。我知道seg故障可能意味着某種無效的內存條目,這是有用的信息......但是* more *有用的信息將是「(void *)最小的不是有效的指針,你是白癡! – levitopher