Bash 告诉我正在释放的指针没有分配。我做了一个小程序来重现这个问题。
#include <iostream>
#include <cstring>
using namespace std;
void display(char* t);
int main()
{
char normArray[1000];
int size;
cout << "Enter tv show: ";
cin.getline(normArray, 1000);
size = strlen(normArray);
char* dynArray = new char[size];
dynArray = normArray;
display(dynArray);
delete[] dynArray;
return 0;
}
void display(char* t)
{
cout << t << endl;
}
如您所见,“char* dynArray = new char[size]”应该分配 dynArray。然后“delete[] dynArray”应该释放该内存。然而 bash 告诉我 dynArray 没有被分配。
我试过只执行“删除 dynArray”,但是,bash 警告我应该使用 delete[],因为 dynArray 是使用“new[]”分配的,但接着又说我从未分配过它。任何帮助将不胜感激。
最佳答案
在调用 new 之后,您将 dynArray 指向 normArray。
char* dynArray = new char[size];
dynArray = normArray; // <--- Problem
display(dynArray);
delete[ ] 然后尝试释放不是动态分配的 normArray。
如果您打算将 normArray 复制到 dynArray,您将需要一个循环或调用类似 strcpy/memcpy 的东西来将内容复制到 dynArray。
基本示例:
for ( size_t i = 0; i < size; i++)
{
dynArray[i] = normArray[i];
}
关于C++(C 字符串)释放的指针未分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267179/