2015-04-18 3 views
-3

Ссылаясь на this link Я закодировал следующее. Получение ошибки сегментации. Я выполнил шаги, как объяснено, here.Ошибка сегментации (сбрасывание сердечника)

код client.c:

int main(int argc ,char argv[]) { 
    if(argc>10) { 
    exit(1); 
    } 
    char *host,*endptr; 
    host = argv[1]; 
    input *result; 
    double *ptr; 
    input array; 
    int i=0; 
    CLIENT *clnt; 

    array.len=argc-2; 
    printf("%d",argc); 
    For (i=2;i<argc-1;i++) 
    { 
*ptr = strtod(argv[i],&endptr); 
array.numbers[i-2]=*ptr; 
ptr++; 
} 

    clnt = clnt_create(host,SORT,SORTVERS,"udp"); 
    if(clnt==NULL) 
    { 
    clnt_pcreateerror(host); 
    exit(1); 
    } 
    result = sortprog_1(&array,clnt); 
    for(i=0;i<array.len;i++) 
    { 
    printf("%f\n",result->numbers[i]); 
    } 
    clnt_destroy(clnt); 
} 

sort.x код

struct input{ 
    double numbers[200]; 
    int len; 
}; 
typedef struct input input; 

program SORT{ 
    version SORTVERS{ 

     input SORTPROG(input) = 1; 
     }=1; 
}=22856; 

SERVER КОД:

input* sortprog_1(input* array, CLIENT *clnt) 
{ 


    int i,j; 
    double temp; 
    for(i=0;i<array->len-1;i++) 
    { 
     for(j=0;j<array->len-1;j++) 
      if(array->numbers[i]>array->numbers[j]) 
      { 
       temp=array->numbers[i]; 
       array->numbers[i]=array->numbers[j]; 
       array->numbers[j]=temp; 
      } 
    } 

    for(i=0;i<array->len;i++) 
    { 
    printf("%f\n",array->numbers[i]); 

    } 
    return array; 
} 
input* sortprog_1_svc(input* array, struct svc_req *clnt) 
{ 
CLIENT *client; 
return(sortprog_1(array,client)); 
} 
+0

Редактирование ссылок для удобочитаемости и удаления тряпки из заголовка – Mark

+0

Итак, когда вы запустили этот код под отладчиком, где именно он сломался? –

+0

@ FrédéricHamidi Выполнено ./server на одном терминале. И затем я выполнил клиент на другом терминале, отобразилась ошибка сегментации. – user3303178

ответ

0
double *ptr; 
... 
*ptr = strtod(argv[i],&endptr); 
array.numbers[i-2]=*ptr; 
ptr++; 

ptr фактически не указывать в любом месте, и вы пытаюсь использовать его хранилище. Выделите для него какую-то память!

+0

Хорошо! Исправленный! – user3303178

Смежные вопросы