c로 작성된 파일을 cpp로 바꾸는 도중 에러,,

stylidy의 이미지

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++에서 프로젝트를 진행해야 할 일이 있어서 변환하려는데 안되서 진행이 되질 않고 있네요,,

조언을 해주시면 감사하겠습니다.

고수분들 어떻게 해야할 지 좀 도와주세요,

planetarium의 이미지

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 인데 강제로 할당해서는 안됩니다.

planetarium의 이미지

안될건 없지 않나요?
헤더라거나 여유 공간 등으로 쓰려고 의도한 걸수도...