2012-12-25 5 views
0

struct 내에서 유지되는 함수에 대한 포인터를 사용하여 함수 hfun을 호출하려고합니다.함수에 대한 포인터 호출하기

이러한 유형의 정의는 다음과 같습니다

typedef struct Table* TableP; 
typedef struct Object* ObjectP; 
typedef int(*HashFcn)(const void *key, size_t tableSize); 
typedef struct Object { 
    void *key; 
    ObjectLink *top; 
} Object; 

typedef struct Table{ 
    ObjectLink *linkedObjects; 
    size_t size, originalSize; 
    HashFcn hfun; 
    PrintFcn pfun; 
    ComparisonFcn fcomp; 
} Table; 

그리고 여기에 내가 전화를하지만 메모리가 장소에 접근하기 위해 노력하고있어 오류 얻으려고 :

Boolean InsertObject(TableP table, ObjectP object) 
{ 

    int i = (*table->hfun)(object->key, table->size); 
    if (table->linkedObjects[i].key == NULL) 
    { 
     table->linkedObjects[i].key = object; 
    } else 
    { 
     table->linkedObjects[i].next->key = object; 
    } 

    return TRUE; 
} 

Eclipse 디버거를 사용하여 변수의 값은 다음과 같습니다.

object->keyvoid*0x804c018
table->size 유형 size_t1

나는이 함수에 대한 포인터를 호출하는 방법이 아니다 같아요. 여기서 뭐가 잘못 됐니?

편집 : 디버그

내가도 볼 수 있습니다 *table->hfun 유형 int(const void *,size_t) table->hfun 유형 당신은 그것을 올바른 방법으로 호출하지 않는 0x11

+0

포스트 문제를 보여줍니다 컴파일 가능한 예. 예를 들어,'hfun' 멤버가 초기화되는 방법을 보여주지는 않습니다. 문제는 간단히 말해서 그렇지 않을 수도 있습니다. –

+0

offhand,'linkedObjects'는 언제 할당 되었습니까? 여러분은'InsertObject'라는 배열에 공간이 있다는 것을 확실하게 알 수 있습니다 만, 더 많은 코드가 없으면 유효한 데이터를 참조하는지 여부 만 추측 할 수 있습니다. – WhozCraig

답변

6

HashFcn 값.

다른 기능과 마찬가지로 기능 포인터에 액세스 할 수 있습니다.

table->hfun(object->key, table->size) 

[편집] 오른쪽, 당신은 또한 hfun 제대로 지정해야합니다 :

int myFunc(const void* key, size_t tableSize) { } 

table->hfun = &myFunc; 
+0

다시 '0x11 "에 대한 소스가 없습니다. – Tom

+3

그러나'(* table-> hfun) (object-> key, table-> size)'를 사용하면 아무런 문제가 없으므로, 문제의 해결책이 될 가능성이있다. –

+0

함수 포인터에 대한 몇 가지 추가 정보로 나의 대답이 업데이트되었습니다. –

관련 문제