为什么gcc不能编译这个调用free()函数的简单代码?

sha*_*oth 0 c++ gcc memory-management

我在codepad.org和ideone.com上尝试了以下代码:

char* ptr = new char;
free( ptr );
Run Code Online (Sandbox Code Playgroud)

是的,我知道这是未定义的行为,但我想编译并运行它以查看会发生什么.

Visual C++ 10编译它,但在上述网站上使用的gcc说

错误:在'('标记之前)的预期构造函数,析构函数或类型转换

为什么这个代码不能用gcc编译,我怎么能让它编译?

Naw*_*waz 5

这是您的代码(来自您的链接):

#include <stdlib.h>

char* ptr = new char;
free( ptr );
Run Code Online (Sandbox Code Playgroud)

free() 是一个函数,在命名空间范围内,您不能编写函数调用语句.

在命名空间范围内,您只能声明定义变量和类型.但是,您可以在变量的初始化中调用函数.所以这没关系:

char* ptr = new char; //Note new is a function call!
Run Code Online (Sandbox Code Playgroud)

但这不可行:

free(ptr); 
Run Code Online (Sandbox Code Playgroud)

如果你想这样做,那么这是一招:

const int ignore = (free(ptr), 0); //at namespace scope!
Run Code Online (Sandbox Code Playgroud)

这没关系.演示:http://ideone.com/8yymM