我是否需要"new"数组才能稍后执行内存集?在 C++ 中
Do i need to "new" a array in order to do memset later? in c++
例如
我有字符str[1024];
我以后会做memset(str,0,1024);
可以吗?或我需要这样做:
char* str = new char[1024];
谢谢。
两者都分配空间,因此两者都可以使用内存集。两者之间的区别在于空间的分配位置。
char str[1024];
在堆栈上分配字符串,一旦超出范围,字符串就会消失。
char* str = new char[1024];
在堆上分配字符串,并将永远存在,直到您删除[]它。
正如@HostileFork已经指出的,你可能想要std::string
这里。如果你正在做的任何事情不是特别像字符串,那么你可能需要std::vector<char> str(1024);
。
无论哪种方式,您都非常确定您不想要new char[1024]
(C++早期的遗留物,如果存在其他设施,可能根本不会使用该语言(,并且可能也不想要char str[1024];
,尽管至少有一些可能性,这个不是一个严重的错误。
直接回答:否。
更好的答案: 不要在C++中使用内存集。 老实说,你可能也不应该在 C 中使用 memset,至少不应该用于它常用的所有事情。 特别是在C++中,将所有字节设置为 0 并不总是"清空"变量的正确方法。甚至是一个数组。 从技术上讲,C 也是如此,但 memset 背后有几十年的滥用......没有人会做出行为不同的实现。
str
ings存储在字符数组中并使用memset
设置它们不是惯用C++。
(注意:我确实经常使用惯用这个词。
说到我是多么的破纪录,我恳求你阅读Bjarne Stroustrup的这篇短文:
学习标准C++作为一门新语言
不要(太(害怕向 StackOverflow 老手展示您正在处理的问题的更多背景,因为您可能会对他们建议的代码进行酷炫的重新想象和改进感到惊讶......
为了使这更像一个答案,您的声明可能应该为:
std::string str;
不必管理大小,可以按值将其返回到调用范围(或不返回(。
- 以下代码执行哪种内存分配(动态或静态)?
- 释放动态分配的内存时是否需要执行此额外步骤
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 内核模式驱动程序可以在任何进程上执行读取进程内存吗?
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- x64内存执行
- 有没有办法获得功能大小并分配内存以复制和执行
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- 如果在执行过程中替换二进制文件,"const"数组是否驻留在内存中?
- Winapi:是否需要在可执行内存映射的文件上调用FlushInstructionCache
- 如何将x64机器代码写入虚拟内存并在C++中为Windows执行
- 执行以下 2 段代码会消耗相同的内存
- C++标准库中是否有保证不执行动态内存分配的函数或类
- 如果我想在执行过程中将其内存减少一半,我可以使用哪种数据结构
- 从另一个进程内的内存执行一个进程
- 从内存执行二进制文件
- c++从内存执行函数