参考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;
服务器代码:
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 :(得分:0)
double *ptr;
...
*ptr = strtod(argv[i],&endptr);
array.numbers[i-2]=*ptr;
ptr++;
ptr
实际上并未指向任何地方,并且您正在尝试使用其存储空间。为它分配一些记忆!