2013-04-15 6 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); 
} 

I는 각각 등가 인덱스 somtab 소자 (위한 X, Y, 및 공칭 값을 포함한다는 즉 somtab [0] .x를 =하여 Xtab, 세 개의 배열하여 Xtab, ytab 및 nomtab을 [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': 왼쪽 피연산자가 'struct'유형이고 '.'을 사용합니다. 오류 C2819 : 형식 'sommet'에 과부하 된 멤버가 없습니다. 'operator ->' – freewilly

+0

위의 두 가지 변경 사항을 모두 적용한 후에도 'check3'전에 충돌이 발생합니다. – freewilly