不能释放()一个字符*

时间:2015-06-15 19:08:13

标签: c

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并比较它们并将它们推入下一个缓冲区(如果有效)。

我现在的问题是,为什么我不能释放那些我不需要的东西? 如果我尝试,整个程序将停止,如果我不这样做,我会发生内存泄漏。

1 个答案:

答案 0 :(得分:1)

“你”,我的意思是你的程序,只能malloc()来自free()和朋友的fetch()存储空间,并且只能以其获得的粒度,并且每次只有一次大块的存储。

在此处显示的代码中,您尝试fetch()来自malloc()的内容。由于我们无法看到该函数的定义,并且您没有提供任何文档,我们最好的猜测是

  • free()为您提供指向除整个块之外的其他内容的指针 来自#!/bin/bash # call.sh voip_binary $1 - et-al;和/或
  • 该计划的其他部分没有 这里显示voip_binary相关的块本身。