关于静态函数中new和delete的使用
我的一个静态函数中定义了一个WSABUFwsabuf[3];变量,并且使用new运算符动态分配了内存wsabuf[0].buf=newchar[2];我在通过类名访问函数...
我的一个静态函数中定义了一个WSABUF wsabuf[3];变量,并且使用new运算符动态分配了内存wsabuf[0].buf=new char[2];我在通过类名访问函数时,运行到delete wsabuf[0].buf;时,vs2008会弹出一个对话框说触发了一个断点或者堆损坏还有具有焦点时按下了F12;这个问题如何解决呢?求高手指教!
展开
1个回答
展开全部
哥们 我不太了解socket和WSBUF结构 ,但一般的用法是这样的
#include "stdafx.h"
//#include "windows.h"
#include "winsock2.h"
class Test
{
public:
static void StaticFuctionTest()
{
WSABUF* wsabuf=new WSABUF[3];
//do something...
//delete wsabuf[0].buf 出发访问异常 ,可能是wsabuf[0].buf指向的内存不是该你控制的
delete [] wsabuf; //一般你声明了什么 完过后就删掉。
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Test::StaticFuctionTest();
return 0;
}
#include "stdafx.h"
//#include "windows.h"
#include "winsock2.h"
class Test
{
public:
static void StaticFuctionTest()
{
WSABUF* wsabuf=new WSABUF[3];
//do something...
//delete wsabuf[0].buf 出发访问异常 ,可能是wsabuf[0].buf指向的内存不是该你控制的
delete [] wsabuf; //一般你声明了什么 完过后就删掉。
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Test::StaticFuctionTest();
return 0;
}
追问
问题我找到了,主要是我在代码中对wsabuf【0】。buf进行了赋值,不小心修改了指针!在两个指针之间进行值传递,如何只改变指针指向的内容而不改变指针本身的地址呢?我使用
*(wsabuf【0】。buf)=*(buf【0】。buf)进行了值交换,这样是成功的,但是总感觉应该有更好的方法吧!分给你啦!希望你能再给个答案!呵呵!
追答
多谢,我确实不太了解网络编程
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询