未分配释放C++(C 字符串)指针



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];
}

最新更新