0
나는 구조체가bsearch는
int addToList(entry_t * list[], int n, const char * name, int lineNr){
int i = 0;
int j = 0;
entry_t * entry;
entry_t * sentry;
bool found = false;
char * tmp = (char*) malloc(sizeof(char)*MAX);
sentry = (entry_t *) bsearch(name,list,n,sizeof(entry_t *), cmpEntries2);
if(sentry != NULL){
printf("%s",sentry->name);
i = sentry->n;
sentry->lines[i] = lineNr;
sentry->n++;
}
else {
sentry = (entry_t *) malloc(sizeof(entry_t));
strcpy(tmp,name);
sentry->name = tmp;
sentry->lines[0] = lineNr;
sentry->n = 1;
list[n] = sentry;
n++;
}
return n;
}
int cmpEntries2(const void * a, const void * b){
assert (a != NULL);
assert (b != NULL);
printf("DB %s %s\n",(const char*)a,(*(entry_t **)b)->name);
return strcmp((const char*)a, (*(entry_t **)b)->name);
}
내 DB 로그
DB argc main
DB argv main
DB printf argc
DB printf argv
DB printf argc
DB printf argv
DB printf printf
0M:
이상한 점은 sentry
은 null이 아니지만 name
은 이상한 것입니다 (임의의 메모리 위치).
(bsearch()
의 결과를 수신하기 위해 사용되는)
구조체 (typedef 구조체)를 제거하면 대답이 정확합니다. – user547995
'struct entry_t'를 작성하고 간단한'entry_t'가 코드에서 동일해야합니다. 그러나 일반적으로'struct'를 작성하고'typedef'를 피하는 것이 더 좋은 스타일입니다 – ensc