• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

KiNgPiTo

Catch de erro de memória

5 mensagens neste tópico

Boas,

tenho o seguinte método que para inicialização de uma camera com o ARToolkit:

ARParam wparam;

if( arVideoOpen( vconf ) < 0 ) {

	cout << "Erro: Nao foi possivel carregar as configurações\n" << endl;// Sai se não conseguir carregar as configurações
	system("pause");
	exit(0);}

if( arVideoInqSize(&xsize, &ysize) < 0 ) // Define os parametros da imagem e sai se não for possivel
	exit(0);

printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);

if( arParamLoad(cparam_name, 1, &wparam) < 0 ) { // Carrega os parametros e sai se não for possivel
	cout << "Erro: Nao foi possivel carregar os parametros de imagem\n" << endl;
	system("pause");
	exit(0);
}

arParamChangeSize( &wparam, xsize, ysize, &cparam ); //Parametros actualizados para o tamanho da imagem

arInitCparam( &cparam );                       // Inicia os Parametros e mostra os mesmos na consola
printf("Informacoes da camera e imagem:\n"); 
arParamDisp( &cparam ); 

if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
	cout << "Erro: Nao foi possivel importar o ficheiro paterno Data/patt.hiro\n" << endl;
	system("pause");
	exit(0);
}

argInit( &cparam, 1.0, 0, 0, 0, 0 );

}

O problema é que se uma camera não estiver ligada, o programa "estoira" e eu queria fazer um try catch para não parar o programa e em vez disso aparecer uma mensagem escrita por mim... ou seja, que excepcao tenho de adicionar ao catch?

PS: O erro que dá é este:

errorut.jpg

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu estás a usar uma biblioteca/API que não conheço mas um Access Violation tem a ver com acesso proibido a memória que não pertence ao teu programa, ou seja, tens um pointer qualquer que está fora do teu controlo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu estás a usar uma biblioteca/API que não conheço mas um Access Violation tem a ver com acesso proibido a memória que não pertence ao teu programa, ou seja, tens um pointer qualquer que está fora do teu controlo.

Lá está, a memória está fora do meu controlo porque a camera não está ligada ao pc e não são retornados os valores necessários.

A minha dúvida é: se eu quiser circundar este bloco de código com um try catch de modo a apanhar a excepção e não deixar o programa crashar, que catch é que eu ponho?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não sei bem como funciona a API e como é que verificas se a câmara está ligada ou se isto é mesmo uma excepção (ás vezes o compilador do Visual Studio diz que não tratastes de uma excepção quando na verdade é um erro mesmo, não uma excepção). Podes explicar +- como verificas se a câmara está ligada e se a função atira alguma excepção?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A linha arInitCparam( &cparam ); vai carregar os ultimos parametros guardados da camera e executa-os para carregar as definições e capturar imagem. Mas quando chega a esta linha e tenha aplicar os parametros a camera e não a encontra, atira a excepção que mostrei no 1º post

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora