263さん。指摘どおりに修正しました。が!やはりセグメンテーション違反とでます…

#include <stdio.h>

#define LIMIT 8
#define NUMBER 5
#define MIN_SIZE 1

struct nimotu
 {
  char *name;
  int size;
  int price;
 } data[]={{"a",4,450},{"b",5,570},{"c",2,225},
    {"d",1,110},{"e",6,670}};

int main(void)
 {
int newvalue,value[LIMIT+1];
 int item[LIMIT+1],i,s,p;

 for(s = 0;s <= LIMIT;s++)
 {
  value[s]=0;
 }

 for(i = 0;i < NUMBER;i++)
 {
  for(s = data[i].size;s <= LIMIT;s++)
  {
   p = s - data[i].size;
   newvalue = value[p] + data[i].price;
   if(newvalue > value[s])
   {
    value[s] = newvalue;
    item[s]=i;
   }
  }
 }

 printf(" 品 目 重量 価格\n");
 for(s = LIMIT,p=0;s >= MIN_SIZE;s-=data[item[s]].size)
 {
  printf("%10s %5d %5d\n",data[item[s]].name,data[item[s]].size,data[item[s]].price);
  p += data[item[s]].size;
 }
 printf(" 合 計 %5d %5d\n",p,value[LIMIT]);
}


これに応じたコンパイルの仕方というのがあるのでしょうか?
gcc -oでやっているのですが、おかしいですか?
↑ちなみに意味もわかっていないものなので…