main 메서드가 반환 될 때 내 프로그램이 손상된 힙에 대한 룬 시간 예외를 throw하는 것으로 보입니다. 복사 생성자를 포함하여 이러한 일이 발생하지 않도록 적절한 예방 조치를 취했습니다. 누가 이런 일이 일어나고 있는지에 대해 밝힐 수 있습니까?C++ 손상된 힙
MyString.cpp
#include "MyString.h"
#include <cstdio>
#include <Windows.h>
MyString::MyString() {
str = (char*)malloc(sizeof(char));
*str = '\0';
}
MyString::MyString(char* src) {
int size = sizeof(char)*(strlen(src) + 1);
str = (char*)malloc(size);
strcpy_s(str, size, src);
}
MyString MyString::operator+(char* add) {
int addSize = sizeof(char)*strlen(add);
int fullSize = sizeof(char)*(strlen(str) + 1) + addSize;
str = (char*)realloc(str, fullSize);
char* temp = str;
temp += strlen(str);
strcpy_s(temp, addSize + 1, add);
return *this;
}
MyString::~MyString() {
if (str)
free(str);
}
MyString::MyString(const MyString &arg) {
int size = sizeof(char) * (strlen(arg.str) + 1);
str = (char*)malloc(size);
strcpy_s(str, size, arg.str);
}
MAIN.CPP
#include <iostream>
#include "MyString.h"
using namespace std;
int main(int argc, char *argv[]) {
MyString test = MyString("hello!");
test = test + " world";
cout << test.toString() << endl;
cout << strlen(test.toString()) << endl;
system("pause");
return 0; //runtime error here
}
toString은 어디에 정의되어 있습니까 – rscarson
"MyString.h"에 무엇이 있습니까? – kkm
나는'malloc'과'free' 대신에'new'와'delete'를 사용할 것을 권장합니다. – grigor