작성
·
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
한참 찾았네요...
위 부분을 잘못 하셨구요.
using T = int인데
new T(int)를 하시면 사실상 int(3) 이라서 초기값을 세팅하는 것이 됩니다.
원래 의도는 new int[3] 즉 int를 3개짜리 배열을 만들어라! 였구요
아 죄송합니다
동적 할당 생성자 불러오는게 익숙해져서 소괄호를 사용했나 봅니다.. ㅠ