인프런 커뮤니티 질문&답변

변상윤님의 프로필 이미지
변상윤

작성한 질문수

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

동적 배열

동적배열 강의 듣는중 에러

작성

·

71

·

수정됨

0

c++ crt detected that the application wrote to memory after end of heap buffer

이라는 오류가 뜹니다.

이걸 무시하면 그대로 원하는 값은 나오기는 합니다.

 

근데 이걸 그냥 지나칠 수는 없어서 질문해봅니다.

f11눌러가면서 에러나는 부분을 찾았는데

reserve에 delete[] _buffer; 를 실행하니 오류가 났습니다.

 

[Vector.h]

#pragma once

#include<assert.h>

class Vector

{

using T = int;

public:

explicit Vector()

{

}

~Vector()

{

if(_buffer)

delete[] _buffer;

}

int size() { return _size; }

int capacity() { return _capacity; }

void push_back(const T& data)

{

if (is_full())

{

int newCapacity = static_cast<int>(_capacity * 1.2f);

if (_capacity == newCapacity)

newCapacity++;

 

reserve(newCapacity);

}

buffer[size] = data;

_size++;

}

void reserve(int capacity)

{

if (capacity <= _capacity)

return;

_capacity = capacity;

T* newBuffer = new T(_capacity);

for (int i = 0; i < _size; i++)

{

newBuffer[i] = _buffer[i];

}

if (_buffer)

delete[] _buffer;

_buffer = newBuffer;

}

 

T& operator[](int index)

{

assert(index >= 0 && index < _size);

return _buffer[index];

}

 

int is_full() { return _size == _capacity; }

int is_empty() { return _size == 0; }

private:

T* _buffer = nullptr;

int _size = 0;

int _capacity = 0;

};

 

해결방법이 있을까요?

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

한참 찾았네요...

image.png

위 부분을 잘못 하셨구요.
using T = int인데
new T(int)를 하시면 사실상 int(3) 이라서 초기값을 세팅하는 것이 됩니다.
원래 의도는 new int[3] 즉 int를 3개짜리 배열을 만들어라! 였구요

변상윤님의 프로필 이미지
변상윤
질문자

아 죄송합니다

동적 할당 생성자 불러오는게 익숙해져서 소괄호를 사용했나 봅니다.. ㅠ

변상윤님의 프로필 이미지
변상윤

작성한 질문수

질문하기