查看完整版本: [-- 这个变量在哪里free()呢? --]

QTCN开发网 -> Qt基础编程 -> 这个变量在哪里free()呢? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

mugua001 2021-08-04 00:55

这个变量在哪里free()呢?

请问:unsigned char *data = (unsigned char *)malloc(*len);
这个在哪里 free(data)呢?

//---------------代码如下-----------------
static unsigned char* unpack_padding_pkcs5(const unsigned char in[], int *len){
    unsigned char paddNum = in[*len - 1];
    if(paddNum > 8){
        *len = 0;
        return NULL;
    }
    *len = *len - paddNum;

    unsigned char *data = (unsigned char *)malloc(*len);
    memset(data, 0, *len);
    memcpy(data, in, *len );
    return data;
}

kaon 2021-08-04 07:58
不在这个函数中free

九重水 2021-08-04 09:06
楼主需要补充一下C的知识,在这里free的话,返回的data就可能错误了,因为你提前释放了内存。

青空飞羽 2021-08-04 10:21
不再使用的时候free

mugua001 2021-08-04 13:44
九重水:楼主需要补充一下C的知识,在这里free的话,返回的data就可能错误了,因为你提前释放了内存。[表情]  (2021-08-04 09:06) 

是的,不能在这个函数里free;

可是在它调用返回之后,再free时,针对哪个 针对进行free呢?这就是我没看明白的地方

mugua001 2021-08-04 13:45
九重水:楼主需要补充一下C的知识,在这里free的话,返回的data就可能错误了,因为你提前释放了内存。[表情]  (2021-08-04 09:06) 

是的,不能在这个函数里free;

可是在它调用返回之后,再free时,针对哪个 对象 进行free呢?这就是我没看明白的地方

mugua001 2021-08-04 13:46
青空飞羽:不再使用的时候free (2021-08-04 10:21) 

没错,是在这函数返回值使用完之后free;
问题来了,我free时,针对 哪个对象呢?  

mugua001 2021-08-04 13:47
青空飞羽:不再使用的时候free (2021-08-04 10:21) 

是这样吗?

char *n1 = unpack_padding_pkcs5(...);

free(n1);

是这样?

青空飞羽 2021-08-04 15:47
mugua001:是这样吗?
char *n1 = unpack_padding_pkcs5(...);
....... (2021-08-04 13:47) 

是的

mugua001 2021-08-04 20:26
青空飞羽:是的 (2021-08-04 15:47) 

谢谢。

mugua001 2021-08-04 20:27
青空飞羽:是的 (2021-08-04 15:47) 

我之前的程序,都没有free,是不是会内存溢出呀

clickto 2021-08-04 22:41
mugua001:我之前的程序,都没有free,是不是会内存溢出呀 (2021-08-04 20:27) 

会的。
现在的操作系统理论上在进程结束的时候会回收该进程的内存。
不过,只申请不释放,这不是个好习惯。

mugua001 2021-08-06 14:41
clickto:会的。
现在的操作系统理论上在进程结束的时候会回收该进程的内存。
不过,只申请不释放,这不是个好习惯。 (2021-08-04 22:41) 

嗯,程序内部、指针传参的方式malloc()申请的内存,我都free过。

像这个函数这样 非传参方式的,我没有 free 。

感谢感谢。


查看完整版本: [-- 这个变量在哪里free()呢? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled