在调用 free() 时使用符号 (&)
Using an ampersand (&) in a call to free()
我正在查看的一些代码声明并稍后初始化指向结构的指针。
mcsConsole_t *mcsConsole;
mcsConsole = (mcsConsole_t *) malloc(sizeof (mcsConsole_t) );
这个结构的类型定义是:
typedef struct {
unsigned int reqType; /* Request Type */
unsigned int consoleID; /* Console ID */
int returnCode; /* Return code */
int reasonCode; /* Reason code */
unsigned int ecbArea; /* ECB posted for responses */
char reserved[4]; /* Available */
cmdRequest_t *cmdRequest; /* Pointer to command request */
cmdResponse_t *cmdResponse; /* Pointer to command response */
} mcsConsole_t;
释放此内存后,指针名称前会包含一个和号。
free(&mcsConsole);
这样做的目的是什么?什么时候在调用 free 时使用 & 符号?我习惯于看到通过简单地提供指针变量名来释放内存的代码。
int *ptr = malloc( sizeof(*ptr) );
free(ptr);
这是程序中的错误。
指向的对象是 mcsConsole
如果在文件范围内声明则具有静态存储持续时间,如果在块范围内声明则具有自动存储持续时间。您只能释放具有 已分配 存储持续时间的对象。
如果您在程序中看到 free(&p)
而 p
不是宏,则可能是一个错误。
那个 & 符号正在获取 mcsConsole
的地址,它本身是指向 mcsConsole_t
结构的指针。我想不出对 free
的调用有效的 单个 场景。系统将尝试 free
指针 ,它在堆栈上(或可能是静态的),就好像它是在堆上分配的结构一样。这闻起来像一个错误,而且是一个特别糟糕的错误。
如前所述,这是代码中的错误。符号表示法可以与 free
一起使用的唯一情况是类似数组的表示法:
sometype_t *p = malloc(sizeof(sometype_t) * n);
然后
free(p);
等同于
free(&p[0]);
我正在查看的一些代码声明并稍后初始化指向结构的指针。
mcsConsole_t *mcsConsole;
mcsConsole = (mcsConsole_t *) malloc(sizeof (mcsConsole_t) );
这个结构的类型定义是:
typedef struct {
unsigned int reqType; /* Request Type */
unsigned int consoleID; /* Console ID */
int returnCode; /* Return code */
int reasonCode; /* Reason code */
unsigned int ecbArea; /* ECB posted for responses */
char reserved[4]; /* Available */
cmdRequest_t *cmdRequest; /* Pointer to command request */
cmdResponse_t *cmdResponse; /* Pointer to command response */
} mcsConsole_t;
释放此内存后,指针名称前会包含一个和号。
free(&mcsConsole);
这样做的目的是什么?什么时候在调用 free 时使用 & 符号?我习惯于看到通过简单地提供指针变量名来释放内存的代码。
int *ptr = malloc( sizeof(*ptr) );
free(ptr);
这是程序中的错误。
指向的对象是 mcsConsole
如果在文件范围内声明则具有静态存储持续时间,如果在块范围内声明则具有自动存储持续时间。您只能释放具有 已分配 存储持续时间的对象。
如果您在程序中看到 free(&p)
而 p
不是宏,则可能是一个错误。
那个 & 符号正在获取 mcsConsole
的地址,它本身是指向 mcsConsole_t
结构的指针。我想不出对 free
的调用有效的 单个 场景。系统将尝试 free
指针 ,它在堆栈上(或可能是静态的),就好像它是在堆上分配的结构一样。这闻起来像一个错误,而且是一个特别糟糕的错误。
如前所述,这是代码中的错误。符号表示法可以与 free
一起使用的唯一情况是类似数组的表示法:
sometype_t *p = malloc(sizeof(sometype_t) * n);
然后
free(p);
等同于
free(&p[0]);