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++(C字符串)指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52267179/

10-09 13:38