new 之后 需不需要 memset?

blue风儿 2007-02-14 10:54:51
比如char* pCh = new char[100];
后面需不需要memset(pCh, 0, 100);
调用了memset有哪些好处?不调用,又有什么潜在的危险?

请帮忙分析一下。。。
...全文
1704 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue风儿 2007-02-14
  • 打赏
  • 举报
回复
to noslopforever(天堂里的死神) :
new调用的时候,它会自动调用构造函数,肯定不行。
我这个帖子只是针对new char[]等内建类型的,呵呵

恩~,谢谢各位了
祝各位新年愉快!!!
beforefly 2007-02-14
  • 打赏
  • 举报
回复
new之后初始化是个好习惯,除非你后面紧跟着用sprinf函数而不是用strcat
天堂里的死神 2007-02-14
  • 打赏
  • 举报
回复
如果new char[100]之后进行Memset是必要的,因为内建类型new之后的取值是未定义的,不memset很危险。
如果new Class[100]之后,Memset就比较危险了,因为Class在New的时候会调用构造函数,没必要调用memset
blue风儿 2007-02-14
  • 打赏
  • 举报
回复
难道new在堆上分配内存的时候,有可能这块内存中还有遗留数据???
所以要memset初始化?

这个说法有根据吗?
htqx 2007-02-14
  • 打赏
  • 举报
回复

数组也要么?
数组还是不用的好.
lidongri 2007-02-14
  • 打赏
  • 举报
回复
比如char* pCh = new char[100];
后面需不需要memset(pCh, 0, 100);
调用了memset有哪些好处?不调用,又有什么潜在的危险?

请帮忙分析一下。。。
=================================
好处就是初始化
如果不初始化的话,可能会出现内存重叠使用的情况(注意是可能)
所以最好要初始化
taodm 2007-02-14
  • 打赏
  • 举报
回复
和new不new的没关系,是变量必须赋初值 这个编程规范。违背了的,迟早要吃苦头。
blue风儿 2007-02-14
  • 打赏
  • 举报
回复
是啊,我一直认为new 和 memset没有任何联系,也不是必须new之后memset,但是就是同事引起的话题,他说必须,又说不出“所以然”,我就拿出来大家讨论讨论

FingerStyle 2007-02-14
  • 打赏
  • 举报
回复
基本没memset过..
taodm 2007-02-14
  • 打赏
  • 举报
回复
如果是自定义的struct/class,应该使用构造函数。如果是内建数据类型,比如int,应该memset。
当然,更好的建议是使用vector取代new出来的数组。
abblly 2007-02-14
  • 打赏
  • 举报
回复
就是不知道new这个动作,到底做了哪些事情?
需不需要memset?
---------------------------
new 就是分配了一些空间,别的没干什么,用这块空间干啥是你自己决定的,要不要memset也是你自己决定的,一般来讲不需要memset,memset和new之间没有任何联系
blue风儿 2007-02-14
  • 打赏
  • 举报
回复
我很清楚memset函数的功能,谢谢!
:)

就是不知道new这个动作,到底做了哪些事情?
需不需要memset?
  • 打赏
  • 举报
回复
看情况。比如
char* pCh = new char[100];
snprintf(pCh,,99,"%s","aaaaaaaaaa");这样就不需要了
blue风儿 2007-02-14
  • 打赏
  • 举报
回复
我有个同事说必须要这样做,但是他又讲不出理由。
我到MSDN上看了一些微软的例子,好像一般都是new过以后memset。
具体有什么不同,我不太清楚。。。
望高人指点。。。
limaolinghu 2007-02-14
  • 打赏
  • 举报
回复
memset
Sets buffers to a specified character.

void *memset( void *dest, int c, size_t count );

Routine Required Header Compatibility
memset <memory.h> or <string.h> ANSI, Win 95, Win NT


For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version


Return Value

memset returns the value of dest.

Parameters

dest

Pointer to destination

c

Character to set

count

Number of characters

Remarks

The memset function sets the first count bytes of dest to the character c.

Example

/* MEMSET.C: This program uses memset to
* set the first four bytes of buffer to "*".
*/

#include <memory.h>
#include <stdio.h>

void main( void )
{
char buffer[] = "This is a test of the memset function";

printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}


Output

Before: This is a test of the memset function
After: **** is a test of the memset function


limaolinghu 2007-02-14
  • 打赏
  • 举报
回复
我从来不用
dead_of_winter 2007-02-14
  • 打赏
  • 举报
回复
针对new char[]等内建类型
new过之后是未初始化的数据 它可能是任何值
如果你不在意它的值是什么 就不需要memset
如果你想让他全是0或者别的什么 那就必须memset

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧