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;
}

解决方案 »

  1.   

    memset(str,'\0',strlen(str)*sizeof(char));
    在没有清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);
      

  2.   

    memset(str,'\0',strlen(str)*sizeof(char));
    改成memset(str,'\0',sizeof(str));
      

  3.   

    char *str = new char[10];
        memset(str,'\0',strlen(str)*sizeof(char));
    -->
    #define MAX_COUNT 10
    char *str = new char[MAX_COUNT];
        memset(str, 0, MAX_COUNT);