c++如何释放内存*char
c++ how to free memory *char?
如何用这样的东西释放内存(Visual Studio 2008-Win32/console):
我只能包括:iostream
#include <iostream>
void data_t(char *test[])
{
test[0] = new char[];
test[1] = new char[];
test[0] = "Test1";
test[1] = "Test2";
}
int main()
{
char *test[2];
data_t(test);
cout<<test[0]<<"n";
cout<<test[1]<<"n";
delete[] test[0];//Debug assertion failed! - The program '[7884] Zadanie_4_sortowanie.exe: Native' has exited with code 3 (0x3).
delete[] test[1];
}
我做错了什么?
test[0]包含一个指向静态字符串"Test1"的指针,该字符串无法释放。使用strcpy复制C字符串。
char[]
是不完整类型,不能在new
表达式中使用。您需要实际决定阵列大小,例如:
char * p = new char[200];
然后你可以在完成后说delete[] p;
。
您将需要类似strcpy
的东西来将数据复制到char
数组中。您编写的分配只覆盖指针,从而丢失对动态分配的跟踪(即泄漏)。(事实上,如果您只想要固定字符串,那么您可能根本不需要动态分配,所以只需删除其中包含new
和delete
的行即可。)
不过,你真正想要的是std::array<std::string, 2>
:
#include <array>
#include <string>
#include <iostream>
std::array<std::string, 2> test = { "Test1", "Test2" };
std::cout << test[0] << "n" << test[1] << "n";
或者通过引用传递:
void populate(std::array<std::string, 2> & a)
{
a[0] = "Test1";
a[1] = "Test2";
}
int main()
{
std::array<std::string, 2> test;
populate(test);
// print ...
}
由于程序在运行时使用"Test1"answers"Test2"(它们由cout打印),编译器必须将它们保存在某个地方。它通过将它们都放入可执行文件中来实现这一点。
由于它们都已在可执行文件中,因此没有理由分配任何新内存。因此,您可以删除data_t中的前两行。
如果你这样做,你会得到一个编译器错误,尽管这个错误应该已经存在了,它会抱怨你试图将字符串文本("Test1","Test2")分配给一个非常数数组。
这里的问题是编译器保存到可执行文件中的字符串不能被修改。您只是在打印它们,但data_t不知道这一点。要解决此问题,您应该使用const char *
而不是char *
如果你打算修改这些字符串,你需要分配新的内存并将字符串复制到其中
相关文章:
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 为什么为char指针分配内存不会截断char序列
- 内存浪费?如果main()应该只返回0或1,那么为什么main是用int而不是短int甚至char声明的
- 让 'std::vector<unsigned char>' 从 'std::string' 中窃取内存
- 如何用char*修复此内存泄漏
- 如何为const char double指针(使用新的)动态分配内存
- char*在结构内存分配中
- 当您声明指向char数组的指针时,存储在内存中
- C++将结构强制转换为 std::矢量<char>内存对齐
- 是否可以让 std::vector<char> 使用选定的内存对齐方式分配内存
- char中的内存[]
- C :占用更多内存,将单个字符作为char或字符串存储
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 如何将常量字符* []隐藏到单个内存块,例如char* ptr
- 如何将足够的数据从文本文件分配到char*中,然后将其复制到内存C 中
- Windows 10中的Char*的内存分配问题
- 创建 char 数组会导致内存为静态
- 动态分配正确对齐的内存:char数组上的新表达式是否合适
- 增强共享内存:char *的向量
- c++如何释放内存*char