删除c++中的动态char**
Deleting dynamic char** in C++
披露:我正在尝试解决一个具有严格时间和内存限制的挑战。我通常会使用向量和字符串,但这里我需要最快和最小的解决方案(对于向量,它实际上超过了时间限制),所以我转向char*的动态数组。我的代码的相关部分:
char** substrings(string s, int* n){
*n = 0;
...
////////////////////////////////
char** strings = new char*[*n];
////////////////////////////////
for (int i = 0; i < s.length(); i++){
for (int j = 1; j < s.length() - i + 1; j++){
...
strings[si] = tmp;
...
}
}
return strings;
}
int main(){
...
for (int ti = 0; ti < t; ti++){
cin >> s;
char** substr = substrings(s, &n);
...
for (int i = 0; i < n; i++){
delete substr[i];
}
}
return 0;
}
在不删除数组(数组的数组)的情况下,一切都运行良好,但这是不可接受的,那么我该怎么做呢?我已经尝试了很多看起来合乎逻辑的变化,但我得到运行时错误。
它类似于分配,但是顺序相反,并且使用delete[]
而不是new[]
:
for(int i = 0; i < LENGTH; i++)
delete[] strings[i]; // delete each pointer in char** strings
delete[] strings; // finally delete the array of pointers
我假设LENGTH
是指向char*
的指针数组的长度。因此,看起来您只执行了第一轮取消分配
for (int i = 0; i < n; i++){
delete substr[i]; // need delete[] substr[i] here
但是使用delete
而不是delete[]
,您需要delete[] substr[i]
,因为我的猜测是substr[i]
是指向new[]
分配的char
s数组的第一个元素的char*
指针。最后需要额外的
delete[] substr;
相关文章:
- 使用动态分配将 char* 复制到另一个字符**
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 如何为const char double指针(使用新的)动态分配内存
- 将动态阵列中的字符与char进行比较
- 试图创建动态分配的char数组时的分割故障
- char *的C 动态分配
- 将包含位字段和动态数据的结构复制到 Char 数组缓冲区中
- 如何动态设置 char*(基于条件)
- 使用 char*array 存储条形图的条形图,以便我可以动态制作它并作为字符串返回
- char*字符串的直接分配与动态分配
- 初始化具有动态长度字符串的 char 数组成员的结构
- 使用malloc()动态分配const char字符串的内存
- 在c++中使用popen并将它们存储在动态大小的char数组中
- 释放方法 C/C++ 中动态分配的 char*
- C++动态内存分配.将动态分配的 char* 返回变量数组分配给 char 变量
- 将动态大小的数据读入 char*
- 指向 char 数组的 C++ 动态 stuct 指针
- 为 char 和 double 或 int 动态分配的内存需要相同的内存
- 在动态分配的 char 数组中保存文件的类内容
- 为什么我的 Char 动态数组仍然返回未初始化的值?