gpt4 book ai didi

c++ - 带指针的 std::swap 给出段错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:19 27 4
gpt4 key购买 nike

我有一个非常简单的程序,但这给了我一个段错误。很长一段时间以来,我一直在努力解决这个问题。请帮忙。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>

main() {
char *database;
int ndata=4;
database="aaa4baa3bcd2aab5";
char *dummy;
dummy=(char *)malloc(16);
memcpy(dummy,database,16);
printf("%s\n",dummy);
std::swap(database,dummy);
dummy[2]='a';
}

在交换之前分配给虚拟变量工作正常。交换后有什么问题。谢谢

最佳答案

database指向一个字符串文字,它被放入只读内存,你不能写入它,即使指针的类型是 char *而不是 const char* .严格来说,文字的类型是 const char *和分配给 char *类型化指针应该是不允许的,但这是今天仍然允许的遗留隐式转换。

swap只交换指针本身,而不是它们指向的内容。所以在swap之后dummy指的是包​​含字符串字面量的内存,不允许写入。

也许你应该考虑使用 std::string对于您的字符串处理,它确实允许简单的赋值等,因此允许 swap按预期工作。

关于c++ - 带指针的 std::swap 给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991541/

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