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

标签 c++ memory memory-management

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/

相关文章:

c++ - 抽象类的模板实例化

c++ - std::unordered_set 是否允许插入重复元素?

c++ - 逐字节读取内存

Objective-C/Cocoa : Uploading Images, 工作内存和存储

C# 或 C++ 游戏 : many 16 color images loaded into RAM. 有效的解决方案?

java - 分配给通过 Java 调用的命令行程序的内存

python - guppy 报告的内存使用情况与 ps 命令不同

c++ - 如何使用德语语言环境在 gdb 中设置双变量?

c++ - 在 C++ 中使用 istringstream 时出现 "Off by one error"

c - txm_module_object_allocate((void**)obj_ptr, sizeof(obj)) 如何工作?