2013-12-23 2 views
0

의 구조에 대한 포인터의 동적 배열을 만들기 AVFrame ** 프레임;내가 잘 작동 다음과 같은 코드가 C

이제이 코드를 프레임 배열 (예 : N 프레임)을 사용하여 확장하려고합니다. 나는 다음과 같은 코드를 시도했지만 내 코드가 정지는 MinGW에서 GCC에 의해 컴파일 된 후 작업 :

int i, N = 3; 
AVFrame **frame; 
frame = (AVFrame *) malloc(N * sizeof(AVFrame *)); 
for(i=0;i<N;i++){ 
    frame[i] = (AVFrame *) malloc(sizeof(AVFrame)); 
    open_input(&frame[i]); 
} 

당신이 알고 마, 문제는 무엇인가?

+0

먼저 malloc의 리턴을 캐스팅 할 필요가 없으면 첫 번째 캐스트는 거짓입니다 – EoiFirst

+0

@EoiFirst malloc을 캐스트하지 않아도된다는 사실을 알고 계셨습니까? – this

+0

@self 읽으십시오 : http://stackoverflow.com/a/605858/2148420 – EoiFirst

답변

0

당신은 아마보다는 open_inputframe[i]을 통과해야한다 &frame[i]

나는이라고 생각

:

frame = (AVFrame *) malloc(N * sizeof(AVFrame *)); 

나는 당신의 컴파일러가 될 줄 알았는데 한 것

frame = (AVFrame **) malloc(N * sizeof(AVFrame *)); 

해야한다 그것에 대해서도 경고합니다.

아직 작성하지 않았다면 컴파일러 (아마도 컴파일러의 Wall)에 경고 수준을 올리고 결과를 처리하십시오.

+0

위의 응답 중 아무 것도 작동하지 않았다! 다른 생각? –

+0

'작업 중지'이외의 문제에 대한 설명을 제공하지 않으므로 더 많은 도움을 제공 할 수 없습니다. 디버거에서 실행하면 내 다음 제안이 될 것입니다. 컴파일러 경고 (/ Wall과 함께 있어야합니다. 특히 인수의 유형을 open_input으로 완전히 변경 한 경우)을 처리해야합니다. –

2

당신이 프레임의 배열을 할당 할 경우, 당신은 단순히 당신이 배열을 원하는 경우에만 요구되는 AVFrame에 대한 포인터에 frame[index]

포인터를 사용하여 각 요소에 접근

AVFrame *frame = malloc(N * sizeof(*frame)); 

할 수 배열은 AVFrame입니다.

0

&frame[i]AVFrame **입니다. open_inputAVFrame * 유형의 인수가 필요합니다. 여기

open_input(frame[i]); 

frame[i]
변경

open_input(&frame[i]); 

유형 AVFrame *이다.

또한 do not cast the return value of malloc입니다.