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->key
void*
값 0x804c018
table->size
유형 size_t
값 1
나는이 함수에 대한 포인터를 호출하는 방법이 아니다 같아요. 여기서 뭐가 잘못 됐니?
편집 : 디버그
내가도 볼 수 있습니다 *table->hfun
유형 int(const void *,size_t)
table->hfun
유형 당신은 그것을 올바른 방법으로 호출하지 않는 0x11
포스트 문제를 보여줍니다 컴파일 가능한 예. 예를 들어,'hfun' 멤버가 초기화되는 방법을 보여주지는 않습니다. 문제는 간단히 말해서 그렇지 않을 수도 있습니다. –
offhand,'linkedObjects'는 언제 할당 되었습니까? 여러분은'InsertObject'라는 배열에 공간이 있다는 것을 확실하게 알 수 있습니다 만, 더 많은 코드가 없으면 유효한 데이터를 참조하는지 여부 만 추측 할 수 있습니다. – WhozCraig