【发布时间】:2014-11-16 13:43:09
【问题描述】:
美好的一天, 请问有人可以帮忙吗?我正在尝试反转作为指针数组的成员。
string::string(char *c)
{
int i =0;
while ((c[i] != '\0'))
{
i++;
}
_lenght= i;
_aString=*&c;
}
void string::reverse() //Requirements specify to have this argument
{
for(int i=0; i<_lenght/2; i++)
{
std::swap(_aString[i], _aString[_lenght-i-1]);
}
}
我得到一个运行时错误。
这是我的主要功能
int main(){
string a;
std::cout << "a is " << a << "\n";
string b("12345");
string c("12345",3);
std::cout << "c is " << c << "\n";
c = a;
a = b;
std::cout << "a is " << a << "\n";
b.reverse();
std::cout << "a is " << a << "\n";
return 0;
}
我得到的错误是
UnisaLesson1.exe 中 0x00fd6710 处未处理的异常:0xC0000005:访问冲突写入位置 0x00fdfd08。
对不起,我还是个新手。
【问题讨论】:
-
std::reverse(_aString, _astring + length);,其中长度不包括空终止符。 -
_aString被设置(以一种奇怪的方式)为指针c的副本,并且可能指向已被破坏的东西或(常量)字符串文字。但是,如果没有看到c在创建string时所指的内容,我们只能猜测。尝试编写一个最小但完整的测试用例来演示问题。 -
您需要在构造函数中分配内存并复制您传递的字符数组。不要忘记在析构函数中释放。
-
@juanchopanza,你是对的。我也认为调用函数字符串是完全不能接受的,但我没有创建赋值
-
@LeonieKruger,
_aString的定义是什么?
标签: c++