从我的 memcpy 得到一个 seg 错误,gdb 不能给我任何其他东西(至少除了我知道如何使用 gdb 的简单方式......)。这件事深深地嵌入了一些使用 Berkely DB 的代码中;我已经删除了唯一应该有用的行。
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));
为了确认变量 minimum 是正确的,我可以运行 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
我这样做的原因主要是因为我将 Berkley DB 教程混为一谈,但后来我也想做
memcpy(databuf+len,(void *)largest,sizeof(int));
即有一个空指针databuf,第一个字节是最小整数,第二个字节是最大整数。我错过了什么?