delete [] str;这里出错了,为什么?// testptr.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "testptr.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一的应用程序对象CWinApp theApp;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
}
char *str = new char[10];
memset(str,'\0',strlen(str)*sizeof(char));
strcpy_s(str,5,"1234"); printf(str); delete [] str;
str= NULL; system("pause"); return nRetCode;
}
//#include "stdafx.h"
#include "testptr.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一的应用程序对象CWinApp theApp;using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
}
char *str = new char[10];
memset(str,'\0',strlen(str)*sizeof(char));
strcpy_s(str,5,"1234"); printf(str); delete [] str;
str= NULL; system("pause"); return nRetCode;
}
解决方案 »
- 文档/视图结构,CChildFrame Cview关系
- 求助:映射模式
- 利用vc与OpenGL显示三维数据
- 一个分栏程序编译能通过,但是运行时出现问题,请各位高手指点! 在线等
- 如何从bits数据得到HBITMAP?
- 如何让CFileDialog类和CIPSPropertySheet类对象显示在最上层?
- 怎样得到windows显卡驱动的hwDeviceExtension结构
- 请问帮助文件是用什么软件做的?
- 请教各位高手如何使用vc存取ACCESS数据库中的OLE对象(图片等)?急死乐!
- 不知哪位仙友能在VC中编写又精确又节约CPU时间的定时器???
- ◆◆如何看第三方10万行代码◆◆
- 我的SQL语句面试题,我是蒙了,大家来看看
在没有清0的情况下,strlen(str)会获得一个很大的值,因为无法预计'\0'的位置
此时就memset就已经越界访问内存了
所以delete会出错。
不能用strlen(str)*sizeof(char)来确定尺寸,因为没有清0,strlen(str)会获得一个很大的值,即便是清0了,strlen(str)得到的是0应该:
int n = 10;
char *str = new char[n];
memset(str,'\0', n);
改成memset(str,'\0',sizeof(str));
memset(str,'\0',strlen(str)*sizeof(char));
-->
#define MAX_COUNT 10
char *str = new char[MAX_COUNT];
memset(str, 0, MAX_COUNT);