inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

버퍼 오버런 관련 질문 합니다.

미해결

홍정모의 따라하며 배우는 C++

강의에서는 생성자에서 다른 생성자를 호출하는식으로 코드를 작성하였습니다. 그런데, 호출되는 생성자의 코드를 똑같이 적어주는 방식으로하면 컴파일러가 버퍼오버런 경고를 띄어줍니다 그래서 std::vector, std::array, initializer_list, 정적배열 로 실험을 해보았는데, 벡터와 이니셜라이저리스트에서는 똑같은 경고를 띄어주더라구요.. 이런 경고를 띄어주는 이유와, 해결 방법에 대해 질문합니다. vs2019 , 디버그모드입니다.감사합니다 아래 코드를 첨부합니다. 코드를 긁어서 복사하시면 더 편하게 질문을 이해하실 수 있습니다. //강의에서 사용된 코드 #include <initializer_list> #include <vector> #include <array> class My_array { private: unsigned m_length = 0; int* m_ptr = nullptr; public: My_array() {} My_array(const unsigned& length) { m_length = length; m_ptr = new int[m_length]; } My_array(const std::initializer_list<int>& list) //:My_array(list.size()) { //생성자를 호출하지않고 생성자와 똑같은 코드를 적어줌 m_length = list.size(); m_ptr = new int[m_length]; unsigned i = 0; for (const auto& e : list) { m_ptr[i] = e; ++i; } } }; //여기서부터 실험 코드 void print(int* ptr); int main() { //동적 할당을 받은후 정적배열의 데이터들을 복사 int arr[]{ 1,2,3,4,5 }; const int length_arr = sizeof(arr) / sizeof(arr[0]); int* ptr_arr = new int[length_arr]; unsigned i = 0; for (const auto& e : arr) { ptr_arr[i] = e; ++i; } print(ptr_arr); //동적할당을 받은후 std::array의 데이터들을 복사 std::array<int, 5> stdArr {1, 2, 3, 4, 5, }; int* ptr_stdArr = new int[stdArr.size()]; i = 0; for (const auto& e : stdArr) { ptr_stdArr[i] = e; ++i; } print(ptr_stdArr); //동적할당을 받은후 initializer list의 데이터들을 복사 auto list={ 1,2,3,4,5 }; int* ptr_list = new int[list.size()]; i = 0; for (const auto& e : list) { ptr_list[i] = e; ++i; } print(ptr_list); //동적 할당을 받은후 벡터의 데이터들을 복사 std::vector<int> my_vec{ 1,2,3,4,5 }; int* ptr_vec = new int[my_vec.size()]; i = 0; for (const auto& e : my_vec) { ptr_vec[i] = e; ++i; } print(ptr_vec); return 0; } void print(int* ptr) { for (unsigned i = 0; i < 5 ;++i) { cout << ptr[i] << " "; } cout << endl; }

  • 4:40
  • C++
홍재윤 댓글 1 좋아요 0 조회수 1820

인기 태그

인프런 TOP Writers

주간 인기글