c++ Delete[]在VS 2013中给出错误
C++ Delete[] giving error in VS 2013
我试图删除一个' const char *
int len = str.length();
const char * c = str.c_str();
unsigned short * s = new unsigned short[len];
for (int i = 0; i < len; i++) {
s[i] = c[i] - '0'; // I dislike this cheat
}
delete[] c; // Gives error.
c
删除后也不再使用。我是c++的新手,我正在尝试学习删除操作符,它不太好:/
我不支持在这种情况下使用new
和delete
,但是要指出您的错误,您正在删除不通过new
分配的内存。
你可能想写delete[] s;
(因为s
是通过new[]
分配的)
同样,s
也可以很容易地变成std::vector<unsigned short>
:
// Initializes a vector of unsigned shorts with a specified size.
std::vector<unsigned short> s(len);
const char * c = str.c_str();
delete[] c; // Gives error.
c
是指向str
的内容的指针,仍然由str
对象本身拥有和管理,可能不会动态分配(例如,它可能是指向str
对象内部的短字符串优化缓冲区的指针),更不用说new[]
了,即使它恰好是str
对象,当它超出范围或出于任何原因将数据复制到更大的缓冲区时,它也会做delete[]
。总之,在调用c_str()
之后,您可以使用指针,直到str
对象被调整大小或"销毁",但不需要自己做任何清理。
查看剩余的代码…
int len = str.length();
const char * c = str.c_str();
unsigned short * s = new unsigned short[len];
for (int i = 0; i < len; i++) {
s[i] = c[i] - '0'; // I dislike this cheat
}
delete[] c; // Gives error.
…唯一的错误本身是你delete[] c
,但你没有delete[] s
,可能应该在某个地方,一段时间后,它不再需要。
std::vector
像这样存储ASCII码(对于c++ 11):
std::vector<unsigned short> s;
for (char c : str)
s.push_back(c - '0');
如果你没有c++ 11,那么:
for (int i = 0; i < str.length(); ++i)
s.push_back(c[i] - '0');
…或者如果你想尝试迭代器…
std::vector<unsigned short> s;
for (std::string::const_iterator i = str.begin(); i != str.end(); ++i)
s.push_back(*i - '0');
您也可以将std::copy
与插入器一起使用,更具声明性,但有点夸张:
std::copy(str.begin(), str.end(), std::back_inserter(s));
不需要删除c,它只是一个指向数组(包含以null结尾的"str"字符序列)的指针。
数组仍然存储在变量"str"中。
相关文章:
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 编译类 C++ 中的线程时出错(错误 xthread)
- 加载GLEW库时出错(错误LNK2001)
- 通过函数指针调用函数时出错(错误C2064)
- 编译core.obj时出错:错误LNK2001:未解析的外部符号_harmony_core_init
- 链接c++静态库与android ndk时出错(错误:无法识别文件格式)
- 使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q