gpt4 book ai didi

c++ - 使用指针时调试断言失败

转载 作者:太空狗 更新时间:2023-10-29 20:37:06 24 4
gpt4 key购买 nike

我试图更好地理解指针,但很难弄清楚为什么我的代码会导致调试断言失败。当我注释掉“while (*neu++ = *s++);”并在“strcopy(neu, s);”中发表评论它工作得很好。他们不应该这样做吗?

#include <iostream>
#include <cstring>

using namespace std;

void strcopy(char* ziel, const char* quelle)
{
while (*ziel++ = *quelle++);
}

char* strdupl(const char* s)
{
char *neu = new char[strlen(s) + 1];
while (*neu++ = *s++);
//strcopy(neu, s);
return neu;
}

int main()
{
const char *const original = "have fun";
cout << original << endl;
char *cpy = strdupl(original);
cout << cpy << endl;
delete[] cpy;

return 0;
}

最佳答案

strcopy 获取指针 neu 的拷贝,因此当您返回它时 neu 仍然指向字符串的开头。使用 strdup1 内的 while 循环,您在返回它之前修改 neu。在此指针上调用 delete 会导致失败,因为它与 new 的不同。

解决方案是使用一个临时变量来递增和复制字符串。

char *neu = ...
char *tmp = neu;
while (*tmp++ = *s++);
return neu;

关于c++ - 使用指针时调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com