3

sizeof(void*) >= sizeof(int) の場合、ツリーで int を収集しても安全ですか?

void *map=0; 
tsearch(42, &map, int_cmp);

?

segfault が発生し、その異常な使用法以外にコードに欠陥は見られません。

編集:もちろん、私はポインターを逆参照しているのではなく、int に戻すだけです。int は void* 変数に組み込むことができるので、ヒープ割り当ては必要ありません。

4

1 に答える 1

2

tsearchの最初のパラメーターはポインターでなければなりません。この場合、数値 42 はポインタとして解釈されるため、segfault が発生します。試す:

void *map=0;
int key = 42;  
tsearch(&key, &map, int_cmp); 
于 2012-04-12T10:57:21.587 に答える