1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> using namespace std; int main() { int* arr = nullptr; int* temp = nullptr; for (int i = 1; i <= 100; i++) { arr = new int[i]; arr[i - 1] = i; if (temp != nullptr) { for (int j = 0; j < i; j++) { arr[j] = temp[j]; } } delete[] temp; temp = new int[sizeof(arr) / sizeof(int)]; for (int j = 0; j < i; j++) { temp[j] = arr[j]; } delete[] arr; cout << "반복" << i << endl; } return 0; } | cs |
for 문 돌리면서 i크기의 동적배열을 만들어서 값을 넣고 그 값을 temp에 보관한 다음에 arr은 해제하고, 다시 새롭게 늘어난 i크기 만큼 동적할당을 해주고 temp에 보관해놓은 걸 가져와서 넣어주고 하는 코드입니다.
근데 이게 한 20번에서 30번 정도 돌다보면 작동이 중지되는데 왜 그런지를 모르겠습니다.
아예 안되면 몰라도 왜 중간에 멈추는지 모르겠네요......
도와주세요 ㅠㅠ
C++에서는 NULL 쓰는거 아니다 - return 0;
C++에서는 iterator 써야 됨?
NULL때문에 오류가 난 건가요? 책에서 포인터 쓰기 전엔 NULL로 초기화를 해놔야지 안전하다고 해서....
nullptr 써라 - return 0;
지금 모바일이라 코드 깨져서 나는 못 봐줌 - return 0;
delete temp[] 이상함
arr[i - 1] = i;도 의미가 없긴한데 이게 오류를 야기하진 않음
if랑 for에 중괄호 생략하다가 헷갈린거같은데
진짜 영문을모르겠네요... 커헉님 말처럼 nullptr 해도 오류나고 2016님이 말한대로 중괄호도 해줬는데 계속 오류가 ㅠㅠ 혹시 비주얼스튜디오 2013 쓰는게 문제인가요?
중괄호 어케처리했는지 보여주세요
당장 보이는 문제가 temp가 NULL일때 delete[]를 한다는거임
글 수정했습니다 ㅠㅠ 이렇게 중괄호 써도 오류가 나네요.. ㅠㅠ
다시보니까 temp를 동적할당 하는 부분도 이상함
sizeof(동적할당포인터) 해봤자 배열의 크기가 안나오가 8이나 4가 나옴
이 두분만 고치면 잘될거에요
sizeof(arr) / sizeof(int) 여기서 오류나는거 아님?
arr이 int*이라서 sizeof(arr) 하면 4 또는 8나옴.
감사합니다!!! 진짜 sizeof 가 문제였네요.... sizeof 어쩌고 를 i로 그냥 바꿔주니깐 잘되네요 ㅋㅋ 감사합니다 !!
댓글달아주신 커헉님 2016님 참의원님 감사합니다