C++ 指针增量查询

标签 c++ c function pointers increment

我有一个函数的工作代码,它接受一个字符和一个数字,并通过将该字符复制一定次数来形成一个字符串。这是一个非常好的作品。

char * buildstr(char c, int n)
{ 
   char * pc = new char[n+1];
   for (int i = 0; i < n; ++i)
   {
      *(pc+i) = c;
   }

   *(pc+n) = '\0';
   return pc;
}

但是,如果我使用另一种逻辑,即直接递增指针本身,那么当我使用 delete [] 释放 main 函数中的内存时,会出现错误。

我的问题是什么?

谢谢,

char * buildstr(char c, int n)
{ 
   char * pc = new char[n+1];
   for (int i = 0; i < n; ++i)
   {
      *pc = c;
      pc++;

   }
   *(pc) = '\0';
   return pc;
}

最佳答案

问题是您要返回递增的指针。 delete[] 必须使用调用 new[] 时返回的指针值来调用,否则会出现未定义的行为。这同样适用于对 free 的调用以及由 malloccalloc 等返回的指针。

关于C++ 指针增量查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378416/

相关文章:

c - ansi-c 将 char 转换为 ascii 表示的 int

scala - scala 中的函数和函数文字

function - 将变量 []interface{} 转换为变量 ...interface{} in go

c++ - 循环效率: merging loops

单击 C++ win32 API 消息框按钮

c++ - 打印最长公共(public)子序列

c - 使用 float 作为正确类型的输入验证

c++ - 如何在 C++ 中获取 Windows 中的设备属性?

c - 在 C 中使用预训练的 pytorch 模型?

javascript - 在从 HTML 代码调用的 JavaScript 函数中使用 $scope 变量 - AngularJS