2013-04-15 74 views
0

我正在尝试使用如下定义的结构'sommet'的数组。访问结构数组中的值

typedef struct sommet { 
double x; 
double y; 
char nom[100]; 
struct arete2* voisin;}; 

sommet* somtab = (sommet *) calloc(nbnoeud, sizeof(sommet)); 
if(somtab = NULL){ 
    puts("Calloc error"); 
    exit(1); 
} 

在我的代码我有三个单独的阵列,xtab中,ytab和nomtab,分别包含在x,y,和等效折射率的somtab元件(NOM值即somtab [0] = .X xtab中[0],somtab [1] .X = xtab中[1]等)什么时候来设定各somtab元件我的程序分解,我从未使它为 “check3”

puts("check1"); 

for(a=0; a<nbnoeud; a++){ 
    printf("Read item %d; \t \t \t %s - (%lf, %lf). \n", a, nomtab[a], xtab[a], ytab[a]); 
} 

puts("check2"); 

for(a=0; a<nbnoeud; a++){ 
    somtab[a].x = xtab[a]; 
    somtab[a].y = ytab[a]; 
    strcpy(somtab[a].nom, nomtab[a]); 
} 

puts("check3"); 

回答

0

使用指针到一个指针。

sommet** somtab = malloc(nbnoeud*sizeof(sommet)); 

使用

somtab[a]->x = xtab[a]; 
    somtab[a]->y = ytab[a]; 
    strcpy(somtab[a]->nom, nomtab[a]); 
+0

当我更改代码以上述建议,它不能编译,建议我将其转换回原始代码。当然,calloc应该返回数组第一个字节的地址,但是当访问单个元素时,它应该恢复为传值。 错误C2232:' - > sommet :: x':左操作数具有'结构'类型,请使用'。' 错误C2819:type'sommet'没有重载成员'operator'>' – freewilly

+0

在做出上述两个建议的更改后,它仍然在'check3'之前崩溃。 – freewilly