void* password_cracker_thread(void* args) {
cracker_args* arg_struct = (cracker_args*) args;
md5hash* new_hash = malloc (sizeof(md5hash));
while(1)
{
char* password = fetch(arg_struct->in);
if(password == NULL )
{
deposit(arg_struct->out,NULL);
free(new_hash);
pthread_exit(NULL);
}
compute_hash(password,new_hash);
if(compare_hashes(new_hash,(md5hash**)arg_struct->hashes,arg_struct->num_hashes) != -1)
{
printf("VALID_PASS:%s \n",password);
deposit(arg_struct->out,password);
}else{
free(password);
}
}
}
这是程序的一部分,你可以从一个环形缓冲区获得char*
个密码,计算md5并比较它们并将它们推入下一个缓冲区(如果有效)。
我现在的问题是,为什么我不能释放那些我不需要的东西? 如果我尝试,整个程序将停止,如果我不这样做,我会发生内存泄漏。
答案 0 :(得分:1)
“你”,我的意思是你的程序,只能malloc()
来自free()
和朋友的fetch()
存储空间,并且只能以其获得的粒度,并且每次只有一次大块的存储。
在此处显示的代码中,您尝试fetch()
来自malloc()
的内容。由于我们无法看到该函数的定义,并且您没有提供任何文档,我们最好的猜测是
free()
为您提供指向除整个块之外的其他内容的指针
来自#!/bin/bash
# call.sh
voip_binary $1
- et-al;和/或voip_binary
相关的块本身。