在阅读《ACE程序员指南》时,发现多处代码都错误的使用了ACE_Message_Block。
在中文版第七章 7.61小节ClientService::handle_input() 函数中,有如下的使用:
char buffer[INPUT_SIZE]; //1 在栈上声明的数组
... ...
ACE_Message_Block *mb;
... ...
ACE_NEW_RETURN
(mb, ACE_Message_Block (&buffer[send_cnt], remaining), -1); //2 动态分配ACE_Message_Block,引用栈上数组空间
... ...
this->putq(mb, &nowait); //将2中分配ACE_Message_Block放入队列
2中ACE_Message_Block的构造函数,直接引用栈上的地址空间,在函数返回后,栈空间被回收。而此时队上的ACE_Message_Block指向的是非法的空间,以后在使用此Message_Block时,将产生严重问题。