我有一个函数的工作代码,它接受一个字符和一个数字,并通过将该字符复制一定次数来形成一个字符串。这是一个非常好的作品。
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
的调用以及由 malloc
、calloc
等返回的指针。
关于C++ 指针增量查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378416/