我有點困惑。使用免費程序時奇怪的變化()
我正在寫一個非常簡單的文件系統,基本上是:從文件
-reads在數據塊-gets從該塊散列
- 搜索鏈表的散列
- 如果沒有找到,追加
- 如果找到,什麼也不做
問題:(?可能泄漏)
當我不使用免費的,程序是慢了很多。
當我使用免費時,程序運行速度更快,完成塊大小爲128和256,但是當我嘗試512(插入時崩潰)時崩潰。我在視覺工作室工作,它只是崩潰。我得到了「VS停止工作..」的消息,沒有提供任何見解。
最重要的是,當我使用free和不使用它時,我得到了很多不同的結果。
任何幫助將非常感激。
好了,一些代碼(略):
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 2010-12-09 11:01:10