70,023
社区成员




#include <stdio.h>
#include <stdlib.h>
#define TEST(T) \
void freeMem(T t) { free((void *)(int)t); }
TEST(float); // 这里如果改成TEST(int)或者TEST(void *)都可以编译通过
int main()
{
float i = 0.1;
free(&i); // 这一行是可以的!为什么放到宏里就不行了呢?
freeMem(&i);
return 0;
}
#define TEST(T) \
void freeMem(T t) { free((void *)(int)t); }
/*上面的宏我一点都没改*/
TEST(float); //楼主你爱留着就留着
TEST(float*); //我在这里加一个
#define TEST(T) \
void freeMem(T t) { free((void *)(int)t); }
TEST(float*); //注意这个*
#include <stdio.h>
#include <stdlib.h>
#define TEST(T) \
void freeMem(T* t) { free((void *)(int)t); }
/*看void freeMem(T* t)*/
TEST(float); // 这里如果改成TEST(int)或者TEST(void *)都可以编译通过
int main()
{
float i = 0.1;
float *pi= malloc(sizeof(float));
/*free(&i); 这一行可以通过编译,但执行可能会挂*/
freeMem(pi);
/*注意虽然freeMem(&i)也能通过编译,但是运行会挂的,
free需要和malloc对应,随便free一个地址是会引起未知错误的*/
return 0;
}
void freeMem(float t) { free((void *)(int)t); };
int main()
{
float i = 0.1;
free( &i );
freeMem( &i );
return 0;
}