私のmemcpyから、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));
変数の最小値が正しいことを確認するには、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));
つまり、最初のバイトが最小の整数で、2 番目のバイトが最大の整数である void ポインター databuf があります。私は何が欠けていますか?