gpt4 book ai didi

c++ - 试图计算我的 "sir"(字符串)类的 ASCII 码总和

转载 作者:行者123 更新时间:2023-11-30 03:52:31 25 4
gpt4 key购买 nike

#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 方法计算我的 sir(string) 的 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)。您在这里缺少 ==

关于c++ - 试图计算我的 "sir"(字符串)类的 ASCII 码总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com