销毁 char * 时 delete[] 上的断点 *
Breakpoint on delete[] when destroying char *
我正在为 class 做作业,其中我不能使用字符串 class。我需要使用 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);
}
这是 class 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中有一个断点;我不知道该怎么办。这意味着有溢出?我该如何解决?
我对指针算法很陌生,所以不要苛刻。
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
字符串中分配空间。一旦分配,它应该可以正常工作。
您可能正在破坏堆。
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)
。
我正在为 class 做作业,其中我不能使用字符串 class。我需要使用 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);
}
这是 class 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中有一个断点;我不知道该怎么办。这意味着有溢出?我该如何解决? 我对指针算法很陌生,所以不要苛刻。
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
字符串中分配空间。一旦分配,它应该可以正常工作。
您可能正在破坏堆。
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)
。