分段故障(核心转储)

时间:2015-04-18 08:43:49

标签: c segmentation-fault rpc

参考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));
}

1 个答案:

答案 0 :(得分:0)

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

ptr实际上并未指向任何地方,并且您正在尝试使用其存储空间。为它分配一些记忆!