2020년 7월 1일 수요일

c++ 은 배열 메모리 복사 주의

어제 잠결에 에러잡다가 저기 첫댓에 낚였다.

순수한 배열만 다루다면 memcpy는 써도 된다. 원래 그럴때 쓰는거다.

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 "pch.h"

#define width 70

#define height 10

void main()

{

std::vector<std::byte> tmp;

std::vector<std::byte> copyed;

tmp.resize(width * height);

copyed.resize(width * height);

for (int j = 0; j < height; j++)

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

tmp[j * width + i] = (std::byte)j;

memcpy(&copyed[0], &tmp,/*&tmp[0]*/ tmp.size());

int numerator = 0;

for (int j = 0; j < height; j++)

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

{

numerator++;

int index = j * width + i;

if (tmp[index] != copyed[index])

printf("chunked %d %d %f\n", &tmp[index], &copyed[index], (float)numerator / (float)(width*height));

}

}

여기서 메모리 볶사를 std::vector 의 주소를 넣어버리면 에러가 뜨는게 당연하다.

만약 std::vector 로 다차원 벡터를 만들어서 std::vector<std::vector<>>이런 꼴이면 첫댓도 일리가 있는데 그런 경우로 보통 안만들지.

그리고 나는 벡터 주소를 넣고 왜 안되지 이러고 있었다.

std::vector<std::vector<>> 를 다루고 있어서 그랬다.

하...

댓글 없음:

댓글 쓰기

List