memset함수 주의할 점

Programming/C++_C#|2016. 10. 26. 10:35
반응형

코딩을 하다가 어떤 DWORD*(동적배열)을 memset함수를 통해 값을 대입하려고 했는데 문제가 생겼다.

코드는 아래와 같다.


DWORD* pdwBuffer = NULL;

pdwBuffer              = new DWORD[100*100];

if( pdwBuffer )

memset( pdwBuffer, 12345678, 100 * 100 * sizeof(DWORD) );


근데 아무리 해도 pdwBuffer에 12345678의 값이 들어가지 않고 이상한 큰 값이 들어가는 것이였다.

잉 뭐지?라고 생각하고 memset함수를 찾아보았더니 

2번째 인자값에 1바이트형의 범위가 넘어가는 수로는 초기화를 안된다는 것을 찾게 되었다.

위에 코드는 1바이트형보다 큰 숫자(12345678)를 넣으니까 오류가 생긴것이였다.


char형이나 unsigned char형으로 써야되는 것을 알게되었다.

그래서 직접 값을 대입해주었다.


DWORD* pTemp = NULL;

pTemp = pdwBuffer;

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

{

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

{

if( pTemp )

{

*pTemp = 12345678;

++pTemp;

}

}

}



반응형

'Programming > C++_C#' 카테고리의 다른 글

[C++] 오버로딩함수  (0) 2017.02.23
fopen, fclose, fseek함수  (0) 2017.02.23
[C++] 가변인자함수  (0) 2017.02.14
[API] 윈도우 api 아이콘 바꾸기  (0) 2016.11.15
자료형변환시 주의할 점 및 자료형 범위  (0) 2016.10.14

댓글()