を持つ構造体を使用して:機能でC:エラー私はこのような構造体持っている変数配列
typedef struct tgPoligono {
int numero_de_lados;
CvPoint** cantos;
float* lados;
double* angulos;
} *tgPoligono;
を、私はこのようにそれを使用しています:
tgPoligono criar_tgPoligono(CvSeq* poligono){
int i;
tgPoligono tg_poligono = (tgPoligono) malloc(sizeof(tgPoligono));
tg_poligono->numero_de_lados = poligono->total;
tg_poligono->cantos = (CvPoint**) malloc(tg_poligono->numero_de_lados * sizeof(CvPoint*));
for(i= 0; i < tg_poligono->numero_de_lados; i++){
tg_poligono->cantos[i] = (CvPoint*)cvGetSeqElem(poligono, i);
}
tg_poligono->lados = (float*) malloc(tg_poligono->numero_de_lados * sizeof(float));
tg_poligono->angulos = (double*) malloc(tg_poligono->numero_de_lados * sizeof(double));
double* angulos = (double*) malloc(tg_poligono->numero_de_lados * sizeof(double));
for(i = 0; i < tg_poligono->numero_de_lados; i++){
CvPoint* pt_0 = tg_poligono->cantos[((i == 0)?(tg_poligono->numero_de_lados - 1):(i - 1))]; //Canto anterior
CvPoint* pt_1 = tg_poligono->cantos[i]; //Canto atual
CvPoint* pt_2 = tg_poligono->cantos[(i + 1) % tg_poligono->numero_de_lados]; //Canto seguinte
//Calculo a distancia entre dois cantos, o que retorna o comprimento do lado do poligono
tg_poligono->lados[i] = sqrt(((pt_1->x - pt_2->x)*(pt_1->x - pt_2->x)) + ((pt_1->y - pt_2->y)*(pt_1->y - pt_2->y)));
//Calculo o cosseno do angulo correspondente ao ponto atualmente avaliado
tg_poligono->angulos[i] = cosseno(pt_0, pt_2, pt_1);
angulos[i] = cosseno(pt_0, pt_2, pt_1);
}
return tg_poligono;
}
[OK]を、私の問題はですtg_poligono-> angulos tg_poligono-> ladosはうまく動作しますが、tg_poligon-> angulosは失敗しません。
私のプログラムで(関数の内部で)関数を使用すると、上のコードはしばらくの間動作し、メッセージなしで失敗します。
私は次の行をコメントアウトした場合、プログラムは正常に動作し、エラーなしで:
あなたは私のコードを見れば、あなたは私がテスト表示されます:
double* angulos = (double*) malloc(tg_poligono->numero_de_lados * sizeof(double));
...
angulos[i] = cosseno(pt_0, pt_2, pt_1);
を
それは同じことだが、構造体を使用していないとうまく動作します。
ps:私はこのコードでopencv関数を使用していますが、問題とは無関係です。 関数cosseno(pt_0, pt_2, pt_1)
は問題なく動作します。 これはCコードです。私はC++を使用できません。
'malloc'の戻り値のキャストは必要なく、エラーを隠すかもしれません。私はあなたがキャストを削除し、コンパイラに関連性のあるエラーについて教えてもらうことをお勧めします。 – pmg
あなたはこれを意味しましたか: tg_poligono-> angulos = malloc(tg_poligono-> numero_de_lados * sizeof(double)); 私は試してみよう! tnks! – vinigarcia87
それは私が言っていることです。 ** [fizzerの答え](http://stackoverflow.com/questions/7820818/c-error-using-struct-with-variable-arrays/7820953#7820953)は**より関連性があります。 – pmg