hur.cn - 华软网

 热门搜索

删除char指针程序出错

  作者:未知    来源:网络    更新时间:2011/10/7
delete [] str;这里出错了,为什么?
C++">
// 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;
}



---华软 网友回答---
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);


---华软网友回复---
学习下
---华软网友回复---
memset(str,'\0',strlen(str)*sizeof(char));
改成memset(str,'\0',sizeof(str));
---华软网友回复---
明白了!
---华软网友回复---
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);

---华软网友回复---
引用 1 楼 firefly3233 的回复:
memset(str,'\0',strlen(str)*sizeof(char));
在没有清0的情况下,strlen(str)会获得一个很大的值,因为无法预计'\0'的位置
此时就memset就已经越界访问内存了
所以delete会出错。
不能用strlen(str)*sizeof(char)来确定尺寸,因为没有清0,strlen(str)会获得一个很大的值,即便是清0了,strlen……


++      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。