我有这样的结构:
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;
}
好的,我的问题在于tg_poligono-&gt; angulos tg_poligono-&gt; lados工作正常但是tg_poligono-&gt; angulos失败了,显然没有理由!
当我在我的程序中使用de function(在for statment中)时,上面的代码会运行一段时间然后失败而没有消息。
如果我评论以下几行,程序运行正常,没有错误:
tg_poligono->angulos = (double*) malloc(tg_poligono->numero_de_lados * sizeof(double));
...
tg_poligono->angulos[i] = cosseno(pt_0, pt_2, pt_1);
如果你查看我的代码,你会看到我做的测试:
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 ++。
答案 0 :(得分:1)
tgPoligono tg_poligono = (tgPoligono) malloc(sizeof(tgPoligono));
仅为指针分配空间。使用sizeof(*tgPoligono)
。
答案 1 :(得分:1)
这就是你想要定义结构的方式,我想:
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));
etc...
请注意从结构定义和typedef的末尾删除星号。这就是我认为令你困惑的事情。