我在程序中,加入了buf++的语句后,在执行delete []buf 的时候出错,但是如果不buf++,则程序不出错,这是为什么?
char *buf=new char[10];
memset(buf,0,sizeof(buf));
buf[0]='1';
buf[1]='2';
buf++;
delete [] buf;
char *buf=new char[10];
memset(buf,0,sizeof(buf));
buf[0]='1';
buf[1]='2';
buf++;
delete [] buf;
解决方案 »
- 两个窗体之间切换时闪屏问题怎么解决啊?朋友们帮帮忙
- 请问这个怎么转化
- vc里面怎样读取image类型的字段?
- dll中的CString问题
- vc++怎样调用pro/e图呢??????(在线等或者给我发邮件)
- CreateDialogParam(hInst,TEXT("IDD_DIALOG1"),NULL,WndProc,0)为什么错?
- CArray的使用问题请教
- 怎样用VC测试自己的程序是否有内存泄漏?
- 一个简单的CRect问题
- 如何设置CToolBar工具兰的按钮状态如禁用,按下,启用等除了用ui消息,CToolBar中是否由此类函数?除了设定类型的我没有找到设定状态的函数
- CFormView如何接收其Edit子窗口的Enter(回车)事件?
- 有100列,都是布尔型字段,怎样写语句来检查出值为true的列呢?
中sizeof(buf)=4不是10
可以这么做:
char *buf = new char[10];
memset(buf,0,sizeof(buf));
buf[0]='1';
buf[1]='2';
buf++;
buf--;
delete []buf;
上面的程序段是正确的。如果真的要指针读写可以这么做:
char *buf = new char[10];
char *Tempbuf = buf;
memset(buf,0,sizeof(buf));
buf[0]='1';
buf[1]='2';
Tempbuf++;
delete []buf;
注意在delete以后Tempbuf也没有意义了。
你的这个很正确,没有发现错误,谢谢,不知是否还有更好的办法
delete的时候是会检查是否是通过new得到的指针release的时候应该不会报错,但是这显然不是什么好事
但是你通过打印处内存中的值就会看得出来:
char * buf = new char[100];
int * p = (int*)buf;
p -= 4;
printf("(%x,%d)\n",p,*p);
输出的是100,也就是分配的大小,