调整大小后将 unique_ptr 字符数组复制到另一个 unique_ptr 字符数组,字符末尾缺少字母

Copying a unique_ptr char array to another unique_ptr char array after resizing is missing letter by the end of char

问题描述

在下面的源代码中,我做了以下事情:

源代码

#include <iostream>
#include <string>
#include <memory> 
#include <string.h>

int main()
{
  std::string name = "hello";
  std::unique_ptr<char[]> ptr(new char[name.size()+1]);
  memcpy(ptr.get(),name.c_str(),name.size());    
  ptr[name.size()] ='[=12=]';
  
  std::unique_ptr<char[]> newptr(new char[strlen(ptr.get())+2]);
  memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));
  newptr[strlen(newptr.get())-1]= 'X';
  newptr[strlen(newptr.get())]= '[=12=]';
  ptr.release(); //RELEASE POINTER
  
  char* c = newptr.get();
  std::cout<< c << std::endl;
  
  return 0;
}

输出

预期的输出应该是:helloX

但我只收到 Hellx

我不知道为什么它不起作用。我不明白为什么没有将字符 X 添加到 newPtr 字符数组的末尾。

抱歉,如果我破坏了唯一指针。这是我的第一次尝试

memcpy(newptr.get(), ptr.get(),strlen(ptr.get()));

这会复制所有内容,但不包括空终止符。

newptr[strlen(newptr.get())-1]= 'X';

这会调用 strlen 使用非 null 终止(且部分未初始化)的字符串。程序的行为未定义。

ptr.release(); //RELEASE POINTER

这会导致内存泄漏!