销毁 char 时在 delete[] 上断点 *

问题描述 投票:0回答:3

我正在为不能使用字符串类的类做作业。我需要使用 char* 作为数组并用它们进行算术运算。

我在 main 中执行的代码如下:我创建 2 个 myString 对象并添加它们。那么这就是正确完成的。两个字符串被连接起来。但是,在

delete[] str
处有一个断点。你能具体告诉我我哪里做错了吗?我想了解发生了什么。

myString& myString :: operator+ (const myString& s)
{


    myString tmp;       //myString temporal
    strcpy_s(tmp.str, strlen(str)+1,str); //STR is copied to tmp.str

    Alloc(strlen(s.str)+size+1);        //Then memory is allocated for both    values



    strcpy_s(str, strlen(tmp.str)+1, tmp.str); //WE COPY TMP.STR INTO STR   NOW WITH ENOUGH SIZE FOR THE NEXT...

    strcat_s(str, strlen(s.str) + size+1, s.str);   //..ARGUMENT WE CONCATENATE 2 MYSTRING.STR

    return (*this);


}

这是 myString 类

class myString
{
public:
//Propietats
int size;
char* str;


//CONSTRUCTORS
myString();


myString(const myString&);


//myString(myString&);


myString(const char*, ...);


//Utilities
int Len(char*);
const void Clear();
const void Alloc(const int);


//Operators
bool operator== (const myString&) const;



bool operator== (const char* s) const;



const myString& operator= (myString&);



const myString& operator= (const char* s);



bool operator!= (const myString&) const;


bool operator!= (const char* s) const;


myString& operator+ (const myString&);


myString& operator+ (const char*);





//Metodes

    ~myString()
    {
        delete[] str; // **ERROR** THERE'S A BREAKPOINT HERE
    }
};

#endif

我的错误是delete[] str中有一个断点;我不知道该怎么办。意思就是溢出了?我该如何解决? 我对指针算术很陌生,所以不要太苛刻。

c++ memory breakpoints operator-keyword
3个回答
1
投票
myString& myString :: operator+ (const myString& s)
{
    myString tmp;       //myString temporal
    tmp.Alloc(strlen(str)+1);  // Add this line
    strcpy_s(tmp.str, strlen(str)+1,str); //STR is copied to tmp.str
    ...

您没有在

tmp
字符串中分配空间。一旦分配,它应该可以正常工作。


0
投票

您可能正在破坏堆。

myString tmp; 

这条指令之后的 tmp.str 是什么? tmp.str 是 NULL 指针吗?指向具有某种默认大小的缓冲区的指针?

strcpy_s(tmp.str, strlen(str)+1,str);

您是否确保 tmp.str 有空间容纳 strlen(str)+1 char ? 您可能应该在执行此指令之前致电

tmp.Alloc(strlen(str)+1)


0
投票

它可以加快处理速度,在将字符串连接放入文字公式之前包含 +1。

© www.soinside.com 2019 - 2024. All rights reserved.