C++ char*用于随机生成的数据

C++ char*用于随机生成的数据,c++,malloc,new-operator,C++,Malloc,New Operator,我想要一个指向随机生成的数据的指针,该数据具有一定的大小 如果我做char*data=new char[fileSize]或char*data=(char*)malloc(fileSize),我不知道会发生什么。我不知道它是随机启动分配的内存,还是所有字节都有相同的值(或是归零) new或malloc是否完成了工作,或者我是否需要其他东西?您对new和malloc的调用不会初始化它们返回的数据。您将得到分配给您的内存地址上的任何值 您最好使用: std::矢量数据(文件大小); 它将为您将数据

我想要一个指向随机生成的数据的指针,该数据具有一定的大小

如果我做
char*data=new char[fileSize]
char*data=(char*)malloc(fileSize)
,我不知道会发生什么。我不知道它是随机启动分配的内存,还是所有字节都有相同的值(或是归零)


new
malloc
是否完成了工作,或者我是否需要其他东西?

您对
new
malloc
的调用不会初始化它们返回的数据。您将得到分配给您的内存地址上的任何值

您最好使用:

std::矢量数据(文件大小);

它将为您将数据初始化为
'\0'
,并在向量超出范围时为您释放底层缓冲内存。

两者都只分配内存。至于“C”方法,您可以使用memset,也可以直接使用calloc(将其设置为0)分配它。如果分配了new,您必须按照语言规范将其归零,则no
new
malloc
不会初始化基元类型上的数据。编译器/运行时可以免费为您提供内存,但它没有做任何处理

然而在实践中,您分配的内存很可能被内核清除为零。现代操作系统将此作为一种安全措施,而不是将曾经由另一个进程拥有的内存归零,否则会将其他进程的数据泄漏到您的内存空间中。如果另一个进程存储了密码呢注意这并不总是正确的,不应该依赖始终初始化内存


如果你真的想要随机数据,你需要自己生成它。你从什么样的随机资源中提取取决于你的需要。如果您需要一些“随机”数据进行测试,或者在游戏中生成怪物,请使用其中一个伪随机生成器生成您的数据。如果您需要加密安全的数字生成,但是,在使用C++时,当使用<代码> MALLC/<代码>为C++中的类对象分配内存时,它不调用类的构造函数,但是当使用<代码>新< /Cl>运算符时,它也调用一个类的构造器,它是<代码> MalOC/之间的主要区别之一。而
new

它们只为字符分配内存。否则,它们不会初始化它们的值。
std::vector<char> data(fileSize);