试图计算我的“先生”(字符串)类的ASCII码总和

时间:2015-06-04 15:57:41

标签: c++ string class sum 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 '\0';
}

int main(){



  cout<<"--------------test for sir-----------------\n";
  sir s("un sir meserias");
  char c=s[1];
  cout<<c<<"\n";
    cout<<s.cod();



}

当我执行此程序时,错误表示“双重免费或损坏”,我不明白导致此错误的原因。在我尝试使用cod方法计算我的先生(字符串)的ASCII码总和之后,它应该返回一个整数值。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的代码中存在一些问题:

<强> 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)。您在这里错过了==