-
慕哥6287543
您需要动态分配char数组:char *recvmsg(){ char* buffer = new char[1024]; return buffer;}对于C ++和char *recvmsg(){ char* buffer = malloc(1024); return buffer;}对于C。发生的是,没有动态分配,您的变量将驻留在函数的堆栈上,因此将在退出时被销毁。这就是为什么您会收到警告。在堆上分配它可以防止这种情况,但是一旦使用完,就必须小心并释放内存delete[]。
-
偶然的你
我建议std::vector<char>:std::vector<char> recvmsg(){ std::vector<char> buffer(1024); //.. return buffer;}int main(){ std::vector<char> reply = recvmsg();}然后,如果您需要char*编写代码,则可以&reply[0]随时使用。例如,void f(const char* data, size_t size) {}f(&reply[0], reply.size());这样就完成了。这意味着,如果您使用的是C API,则仍然可以使用std::vector,因为您可以传递&reply[0]给C API(如上所示)和replyC ++ API。底线是:尽量避免使用new。如果使用new,则必须自己进行管理,并且delete在不需要时进行管理。
-
慕桂英4014372
警告消息是正确的。您将返回一个本地数组的地址,该地址在函数返回后消失。您可以使用动态内存分配来做到这一点:char *recvmsg(){ char *buffer = (char*)malloc(1024); return buffer;}问题是您需要确保以后再free()使用指针,以避免内存泄漏。或者,您可以将缓冲区传递给函数。void recvmsg(char *buffer,int buffer_size){ // write to buffer}void main(){ char buffer[1024]; recvmsg(buffer,1024);}这避免了内存分配的需要。实际上,这是首选的方法。