尝试计算我的"sir"(字符串)类的 ASCII 码总和


#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)。这里缺少==

最新更新