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

问题描述 投票:1回答:1

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 []”分配的,但接着说我从未分配过它。任何帮助将不胜感激。

c++ memory memory-management
1个回答
1
投票

在调用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];
}
© www.soinside.com 2019 - 2024. All rights reserved.