|
1
10
因为:
这是为了通过
稍后,当您试图修改指针指向的内存时,这是未定义的行为。 通常,字符串文本将存储在只读内存中以允许进行某些优化,任何修改它们的尝试都将导致访问冲突。
你很可能会发现它会起作用的。 然而,你的班级真的应该 为了字符串本身的目的-仅仅一个指针是不安全的,因为传递给您该指针的代码也可以更改它的内容。 为了更安全,您应该更改代码:
|
|
|
2
2
字符串文本是常量(利用不推荐的自动转换
在实践中,访问冲突发生是因为新版本的VC++将字符串文本放在可执行文件的一部分中,该部分在内存中被映射为只读(这无疑是一件好事),并且试图写入它的任何结果(正确地)都在访问冲突中。
解决方案
复制
传递给构造函数的字符串(顺便说一句,它应该接受
:在实际的项目中,不要重新发明轮子,使用一个好的预先制作的字符串类,比如
|
|
3
2
不应该像上面那样复制字符串文本地址。行为未定义。
确保在String类的析构函数中删除它。 |
|
|
4
1
您试图指定给字符串文字。它们不是char*,而是const char*。试图修改字符串文本是未定义的行为。 |
|
|
5
0
“test”是常量字符串,不能写入。 s=x; 尝试执行strcpy,这样s将拥有x的非常量副本,而不是常量原件。 |
|
|
6
0
不能通过使用[]访问来修改“test”字符串。 错误是s[i]=什么。 在构造函数中,必须在内部为句柄“test”字符串文本分配空间,然后可以使用[]运算符修改单字符访问。 要解决的示例(使用基本复制):
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |