首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >` `free()`包装器

` `free()`包装器
EN

Stack Overflow用户
提问于 2011-04-07 06:23:07
回答 2查看 480关注 0票数 1

我正在尝试编写mallocfree包装器,我想知道为什么下面的代码会给出错误的pointer being freed was not allocated,为什么delete()不起作用?

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

#define log(v) printf(#v " == %d \n", v)
#define new(n, type) _new((n), sizeof(type), __LINE__, __FILE__)

void *_new(int n, size_t size, int line, char *file)
{
    int *ptr;
    ptr = malloc(n * size);

    if (ptr == NULL) 
    {
        printf("new(): Memory allocation error, file \"%s\", line %d. \n", file, line);
        exit(EXIT_FAILURE);
    }

    return ptr;
}

void delete(int *ptr)
{
    free(*ptr);
    *ptr = NULL;
}


main()
{  
    int *p;

    p = new(1, int);
    log(p);

    delete(&p);
    log(p);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-07 06:26:35

既然是你,

代码语言:javascript
复制
int *p;
p = new(1, int);
delete(&p);

那么你应该

代码语言:javascript
复制
void delete(int** ptr) //two ** here!!
{
    free(*ptr);
    *ptr = NULL;
}
票数 5
EN

Stack Overflow用户

发布于 2011-04-07 06:25:16

问题是这一行

代码语言:javascript
复制
free(*ptr);

free函数需要一个指针值,但是您给了它一个int。尝尝这个

代码语言:javascript
复制
free(ptr);

编辑

为什么要投反对票?delete函数在空闲的用法方面是完全不正确的,我关于它的陈述是正确的。事实上,delete的特定不正确用法使它完全正常工作(它的正确性取决于平台),但这并不会使我的答案不正确。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5573703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档