c++ - 测试(2922,0x10f07ce00)malloc:*** 对象 0x7fb438c05a70 错误:未分配指针被释放
问题描述
这是我写的 C++ 程序,这个程序创建了一个 String 类,其中包含两个属性str(用于存储字符串)和len(用于存储字符串的长度):
#include<iostream>
#include<string.h>
using namespace std;
class String {
char *str;
int len;
public:
String();
String(const char*);
String(const String&);
~String();
friend String operator + (const String&, const String&);
friend bool operator <= (const String&, const String&);
friend ostream& operator << (ostream&, const String&);
};
String::String(void)
{
// Default constructor of the class String
str=NULL;
len=0;
}
String::String(const char* cp)
{
// Parametrized constructor of the class String
len=strlen(cp);
str=new char[len+1];
strcpy(str, cp);
}
String::String(const String& str1)
{
// Copy constructor of the class String
len=str1.len;
str=new char[len+1];
strcpy(str, str1.str);
}
String::~String(void)
{
// Destructor of the class String to
// free the heap memory allocated using new operator
delete[] str;
}
String operator + (const String& str1, const String& str2)
{
// Overload + operator to concatenate two strings and
// return the object of class String containing the cocatanated string
String str3;
str3.len=str1.len+str2.len;
str3.str=new char[str3.len+1];
strcpy(str3.str, str1.str);
strcat(str3.str, str2.str);
return str3;
}
bool operator <= (const String& str1, const String& str2)
{
// Overload <= operator to compare two objects of class String
if(str1.len<=str2.len)
return true;
else
return false;
}
ostream& operator << (ostream& dout, const String& str1)
{
// Overload << operator to print the string using object name of class String
dout<<str1.str;
return dout;
}
int main()
{
String s1="New";
String s2="York";
char capital[]="Delhi";
String s3=capital;
String string1, string2, string3;
string1=s1;
string2=s2;
string3=s1+s3;
cout<<string1<<endl;
cout<<string2<<endl;
cout<<string3<<endl;
return 0;
}
使用 g++ 运行此程序后,我收到以下错误消息:
New
York
NewDelhi
test(2922,0x10f07ce00) malloc: *** error for object 0x7fb438c05a70: pointer being freed was not allocated
test(2922,0x10f07ce00) malloc: *** set a breakpoint in malloc_error_break to debug
fish: Job 1, './test' terminated by signal SIGABRT (Abort)
看起来一些堆内存被释放了两次,或者一个未分配的内存被释放了。我无法弄清楚程序哪里出错了。
解决方案
推荐阅读
- javascript - 单击链接时,选择 html 表的某些行并将所选行的一列的值发送到另一个 php 页面
- java - 使用美国运通/节点的 GraphQL 查询列表
- javascript - 使用 JavaScript 为 MS Outlook 生成长电子邮件正文
- r - R中两个矩阵(data.frames)列的余弦相似度
- mysql - 匹配 2 个具有特定条件的 SQL 表
- java - 托管到服务器时,登录在 Spring Boot(使用 Spring Security)中不起作用
- aws-lambda - “缺少身份验证令牌”错误,身份验证类型设置为 NONE
- c# - 使用 Vuforia 时,如何在删除目标图像时阻止我的组件显示?
- android - 通过 Util 类绑定数据时模型类中的绑定错误
- vb.net - 如何 CR 显示从运行时编辑的数据集中的多个值