c로 작성된 파일을 cpp로 바꾸는 도중 에러,,
글쓴이: stylidy / 작성시간: 토, 2009/04/04 - 11:58오전
h-> quant4_mf[i] = x264_malloc(52*size*sizeof(uint16_t) );
이 문장에서 error C2440: '=' : 'void *'에서 'uint16_t (*)[16]'(으)로 변환할 수 없습니다.라는 에러메세지가 나타나는데 명시적 캐스트를 사용해서 변환을 하려고 하는데 안되네요,,,;;;
quant4_vf[i]의 선언은
uint16_t (*quant4_mf[4])[16];
이구요,, uint16_t는 헤더파일에서 정의되어 있는것이구요,,
x264_malloc함수 역시 이미 정의 되어 있는 것이구요,,
여기서 궁금한 점은 x264_malloc()이 malloc()과 같이 void형의 값을 리턴을 해서 quant4_mf에
값을 쓸수가 없는데,, 명시적 캐스트를 이용해서 강제로 형태를 바꾸려고 하는데,, 그냥 포인터로만
선언이 되어있으면 변환을 하겠는데 배열과 포인터가 함께 선언되어 있어서 어떻게 해야할지 난감하네요,,;;
어떻게 캐스팅 해야할지 참 난감한 상황입니다.
제가 이걸 C++에서 프로젝트를 진행해야 할 일이 있어서 변환하려는데 안되서 진행이 되질 않고 있네요,,
조언을 해주시면 감사하겠습니다.
고수분들 어떻게 해야할 지 좀 도와주세요,
Forums:
h-> quant4_mf[i] = (uint16_t
h-> quant4_mf[i] = (uint16_t (*)[16]) x264_malloc(52*size*sizeof(uint16_t) );
이렇게 해주면 될것 같은데요.
안됩니다
uint16_t (*quant4_mf[4])[16] 이라는 선언은 uint16_t 의 16 개 배열에 대한 포인터(들)의 선언입니다. 고로 2 * 16 = 32 byte 짜리 메모리 영역의 포인터(들)입니다.
x264_malloc(52*size*sizeof(uint16_t) ) 에서 할당받는 사이즈는 적어도 52 * size * 2 = 104 * size 인데 강제로 할당해서는 안됩니다.
안될건 없지
안될건 없지 않나요?
헤더라거나 여유 공간 등으로 쓰려고 의도한 걸수도...
댓글 달기