我希望有一个指向随机生成的具有一定大小的数据的指针。
我不知道当你这样做时会发生什么?如果我char* data = new char[fileSize]
或char* data = (char*)malloc(fileSize)
。我不知道它是否随机启动分配的内存,或者所有字节是否具有相同的值(或归零)。
new
或malloc
是做这项工作还是我需要别的东西?
答案 0 :(得分:2)
您对new
和malloc
的来电不会初始化他们返回的数据。您将获得分配给您的内存地址的任何值。
最好使用std::vector:
std::vector<char> data(fileSize);
它将为您初始化数据'\0'
,并在向量超出范围时为您释放底层缓冲区内存。
答案 1 :(得分:2)
两者都只分配内存。对于“C”方法,您可以使用memset或直接使用calloc(将其设置为0)进行分配。如果分配新的你必须将其归零
答案 2 :(得分:2)
两者都分配内存,但是当你使用malloc
为c ++中的类对象分配内存时,它不会调用类的构造函数,但是当你使用new
运算符时,它也会调用类的构造函数malloc
和new
之间的主要区别之一。
答案 3 :(得分:1)
根据语言规范,没有new
和malloc
不初始化基本类型的数据。编译器/运行时可以自由地为你提供它没有做任何事情的内存。
然而在实践中,你分配的内存很可能被内核归零。现代操作系统将此作为一种安全措施,而不是将曾经由另一个进程拥有的内存归零可能会将其他进程的数据泄漏到您的内存空间中。如果其他进程存储了密码怎么办? 注意这并非总是如此,不应该依赖。 始终初始化您的记忆。
如果您确实需要随机数据,则需要自己生成。您从哪个随机来源取决于您的需求。如果您需要一些“随机”数据进行测试,或者比如说,在游戏中生成怪物,请使用其中一个伪随机生成器available in the standard library来生成数据。如果您需要加密安全数字生成,确保您有正确的更复杂。