引用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));
}

最佳答案

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


ptr实际上没有指向任何地方,您正在尝试使用其存储。为此分配一些内存!

关于c - 分段故障(核心已转储),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29714936/

10-11 22:00