尝试计算我的"sir"(字符串)类的 ASCII 码总和
Trying to calculate ASCII code sum of my "sir" (string) class
#include <iostream>
#include <string.h>
using namespace std;
class sir{
int lung; //sir lenght
char* sirul; //pointer to the first character form sir
public:
sir(const char*);//constructor,for test
~sir();// destructor
char operator[](int index);
int cod();
};
int sir::cod()
{
sir u=*this;
char* s=sirul;
int i,sum,l=lung;
if (lung=0)
cout<<"ASCII code sum is 0";
else
{
for(i=0; i<l; i++)
{
sum=sum+int(s[i]);
}
}
return sum;
}
sir::sir(const char* siroriginal)
{
int lungime=strlen(siroriginal);//string length
lung = lungime+1;
sirul = new char[lung];
strcpy(sirul,siroriginal);
}
sir::~sir(){
delete sirul;
}
char sir::operator[](int index){
if(index<lung && index >=0)return sirul[index];//verificare minima, verific daca este in limite
return ' ';
}
int main(){
cout<<"--------------test for sir-----------------n";
sir s("un sir meserias");
char c=s[1];
cout<<c<<"n";
cout<<s.cod();
}
当我执行这个程序时,一个错误说"double free or corruption",我不明白是什么导致了这个错误。它出现在我试图用cod
方法计算我的sir(字符串)的ASCII码和之后,应该返回一个整数值。
我该如何解决这个问题?
您的代码中有几个问题:
1。第一:
这里有一个不匹配的 new[]
/delete
调用。将delete sirul
替换为delete[] sirul
2。第二:
在sir::cod
中,你实际上是通过
sir u=*this;
由于您根本没有使用u
,您应该删除这一行。它是你双重自由的源泉。在cod
函数结束时,u
将被销毁,内部指针sirul
将被删除。但是由于您没有定义任何复制操作符,编译器将为您生成它,并且您最终将在两个sir
实例之间共享指针。当第二个实例被销毁时,sirul
将再次被删除。导致错误。
3。第三:
接下来,在cod
中,您忘记将sum
初始化为0。这就是为什么你的成绩不好。
4。第四:
在cod
中,您正在执行if (sum = 0)
。这里缺少==
相关文章:
- 具有默认模板参数的多态类的模板推导失败
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- std::具有相同基类的类的变体
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 无法访问嵌套类.类的使用无效
- 如何返回一个类的两个对象相加的结果
- C++中带有List类的迭代器Segfault
- 无法创建抽象类的实例
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 通过指向指针数组的指针访问子类的属性
- 如何比较自定义类的std::变体
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何引用基类的派生类?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 类的C++属性似乎已重新初始化
- 为什么指针不写入类的地址?
- 如何将lambda作为模板类的成员函数参数
- 尝试计算我的"sir"(字符串)类的 ASCII 码总和