모두의 코드 커뮤니티

C++ 버퍼오버런 질문 (feat. 내가 만드는 string 클래스)

씹어먹는 C++ <4-5 내가 만드는 string 클래스> 에서
insert 함수를 만드는 부분입니다.

MyString& MyString::insert(int loc, const MyString& str)
{
if (loc<0 || loc> string_length) return *this;

if (memory_capacity < str.string_length + string_length) {
	if (memory_capacity * 2 > string_length + str.string_length)
		memory_capacity *= 2;
	else
		memory_capacity = string_length + str.string_length;

	char* prev_string_content = string_content;
	string_content = new char[memory_capacity];

	int i;
	for (i = 0; i < loc; i++) {
		string_content[i] = prev_string_content[i];
	}
	for (int j = 0; j < str.string_length; j++) {
		string_content[i + j] = str.string_content[j];
	}
	for (; i < string_length; i++) {
		string_content[i + str.string_length] = prev_string_content[i];  // 버퍼 오버런 발생
	}
	delete[] prev_string_content;
	string_length = string_length + str.string_length;
	return *this;
}

}

총 3개의 for문 중 마지막 for문을 보면
string_content[i + str.string_length] = prev_string_content[i];
부분에서 버퍼 오버런 경고가 발생합니다.
오류가 아니기때문에 insert 함수가 잘 돌아가긴 하지만 거슬리는 부분입니다.

왜 오버런이 발생한거고 어떻게 해결할수 있을까요?

경고는 ~~될 수 있다 정도로해석하시면 됩니다.
아마 i + str.string_length 부분에서 경고가 발생 할 것 같은데, i, string_length 값에 따라서 배열 크기를 넘을 수 있기 때문일 것 같아요.