我寫作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);
}
邊注:只是要小心你不嘗試在C編譯此++編譯器... – Mehrdad 2011-04-06 22:24:12
你的代碼是不是編譯。如果您的編譯器的錯誤檢查足夠鬆散以接受此代碼,則至少必須針對代碼中存在的嚴重錯誤發出一些警告。在解決這些錯誤之前,分析代碼的行爲沒有多大意義。你現在擁有的僅僅是無用的指針操作的無意義混亂。 – AnT 2011-04-06 22:30:54
@Mehrdad:或者就此而言,C編譯器,因爲它使用標識符_new,它在文件範圍保留。 – 2011-04-06 23:36:56