我正在尝试编写malloc
和free
包装器,我想知道为什么下面的代码会出现错误pointer being freed was not allocated
,为什么delete()
不起作用?
#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);
}
答案 0 :(得分:5)
既然你,
int *p;
p = new(1, int);
delete(&p);
然后你应该
void delete(int** ptr) //two ** here!!
{
free(*ptr);
*ptr = NULL;
}
答案 1 :(得分:0)
你
错过了free()
指针指向的东西(*ptr
),而不是指针ptr
本身。&
来电中的delete()
;遗憾。
答案 2 :(得分:-1)
问题在于这一行
free(*ptr);
free
函数需要一个指针值,但你要给它一个int
。试试这个
free(ptr);
修改强>
为什么会掉线?关于free的使用,delete
函数是不正确的,我的陈述是正确的。 delete
的特定错误用法使其完全有效(它的正确性取决于平台)这一事实并不能使我的答案不正确。