조금 혼란 스럽습니다.free()를 사용할 때 프로그램이 이상하게 변경됨
나는 기본적으로 매우 간단한 파일 시스템을 쓰고 있어요 :
-reads을 데이터 블록에서 파일
에서 -gets 그 블록에서 해시
- 검색이 해시에 대한 링크 목록
-if는
문제 아무것도
을하지 않는다, 발견 -if을 추가, 찾을 수 없습니다 (? 아마 누출)
내가 무료로 사용하지 않는 프로그램이 많이 느립니다.
무료로 사용하면 프로그램이 더 빨리 실행되고 128 및 256 블록 크기로 끝나지만 512 (삽입 충돌) 시도하면 충돌이 발생합니다. 나는 비주얼 스튜디오에서 일하고 있는데, 그냥 충돌합니다. 나는 통찰력을 제공하지 않는 "VS의 작동을 멈췄다."라는 메시지를 얻습니다.
무료로 사용할 때와 사용하지 않을 때의 결과가 많이 다릅니다.
도움이 될 것입니다.
좋아, 일부 코드 (약칭 함) :
struct list_el
{
char* hash;
struct list_el* next;
struct list_el* prev;
};
typedef struct list_el item;
item* head, *tail;
void ins(item* ins)
{
item* iterator = (item*)malloc(sizeof(item));
if(iterator == NULL)
{
printf("out of memory\n");
exit(1);
}
else if(head != NULL)
{
iterator = head;
while(iterator != NULL)
{
if(strcmp(iterator->hash, ins->hash) == 0)
{
//free(iterator); (problem line)
matches++;
return;
}
else if(iterator->next != NULL)
iterator = iterator->next;
else
break;
}
}
unique_blocks++;
if(head == NULL)
{
head = ins;
ins->prev = NULL;
}
else
{
tail->next = ins;
ins->prev = tail;
}
tail = ins;
ins->next = NULL;
}
int main()
{
unsigned char* c = (unsigned char*)malloc(BLOCKSIZE+1);
if(c == NULL)
exit(1);
FILE* fp = fopen("input2","r");
if(fp == NULL)
exit(1);
int i = 0;
char* answer = (char*)malloc(sizeof(char)*90);
if(answer == NULL)
exit(1);
item* ins_item;
char ch;
do
{
if(i == BLOCKSIZE)
{
i = 0;
answer = sha1((unsigned char*)c);
ins_item = (item*)malloc(sizeof(item));
if(ins_item == NULL)
exit(1);
ins_item->hash = answer;
ins(ins_item);
}
else
{
ch = fgetc(fp);
bytes_read++;
c[i] = ch;
i++;
}
}while(ch != EOF);
fclose(fp);
return 0;
}
좋은 점. 감사. – prelic