unordered_map::insert / std:: length_error

WanJu Kim·2023년 1월 26일
0

2D Project

목록 보기
8/13

2D Project중, 성장 신호 생겼다.

이 화면으로의 전환과 함께 std:: length_error 에러가 떴다. 검색해보니 string의 맥시멈 크기로 뭘 넣었다고 하던데 나의 경우는 좀 달랐다.


이 구문에서 문제가 생긴 것인데, spriteData는 다음의 구조체다.

저기 texelSpriteSize를 주석처리 하니까 에러가 안 떴다. 그래서 크기 제한인가 싶었는데, 그래서 무작정 변수를 한 5개 더 넣었는데 또 된다. 원인은 정확히 모르겠는데, '그냥 특정 크기에서는 대입이 안되나보다.'라고 결론짓기로 했다.

고치는 도중에 나온 또 다른 에러.


23.6.5

unordered_map 넣는 방법 다양한데, 저 방법은 이상하게 된다. insert는 안됨. 왜지?


23.6.22

또 저 성장 신호 나왔는데 이전에 나를 믿지 못하고(?) 별 짓 다 하다가 또 struct 건드리니 됐다. 그래서 아주 그냥 제대로 파헤쳐봤는데,

vector<ImageData> imageDatas = vector<ImageData>();

이 구문 주석 처리하고 실행하니 돼서 저 벡터가 문제인 줄 알았음. 근데 그 '벡터 앞에 메모리 크기가 얼마인지'가 영향을 주더라. 하나하나 실험해봤는데,

4바이트 안됨.
8바이트 됨.
12바이트 안됨.
16바이트 안됨.
20바이트 됨.
24바이트 안됨.
28바이트 안됨.
32바이트 됨.

뭐 이런 식으로 된다. 나름 규칙성이 있다. 8바이트부터 12바이트마다 된다. 뭐 16바이트, 32바이트마다도 아니고 좀 이상하긴 하다. 이렇게 되는 이유는 모르겠다. 의도한 건지, 아닌 건지.

그리고 나 64비트 운영체제라 포인터 8바이트 취급되는데 왜 4바이트로 나오는지 모르겠다.

그럼 운영체제 바뀌면 또 다른 결과가 나온다는 거임? ㄷㄷ

아까 8바이트부터 12바이트마다 된다고 했던가? 저 벡터 구문 뒤에 또 얼마나 메모리가 있는지에 따라서 또 달라진다.

더 이상 이 문제는 좀 그만 겪었으면...1.5일 고통 받음.
진짜 원인

profile
Question, Think, Select

0개의 댓글