線形探索のエラーがでて困っています
線形探索を用いて表を作るプログラムを作ったのですが、データの数が10000ならば作動するのですが、それ以上になってしまうとセグメントエラーが起こります。なぜだが教えていただけないでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000000
#define M 10
typedef int Key;
typedef struct item{
Key key;
}Item;
struct table {
int n;
Item item[N];
};
typedef struct table *Table;
Item *lookup_item(Table table ,Key key){
int i=0;
while(1){
if(i==table->n)
return (0);
if(table->item[i].key==key)
return &(table->item[i]);
i++;
}
return 0;
}
int add_item(Table table, Item item){
int i;
int n=table->n;
if(lookup_item(table ,item.key)!=0)
return (0);
else {
table->item[n].key=item.key;
table->n++;
return (1);
}
}
Table new_table(){
Table table;
table = (Table)malloc(sizeof(table));
return table;
}
int remove_item(Table table, Key key){
int i=0;
int n=table->n;
if(lookup_item(table,key)!=0)
{
while(1){
if(table->item[i].key==key){
table->item[i].key=table->item[n-1].key;
table->n--;
return 1;
}
i++;
}
}
else return (0);
}
Key keys[N];
int main() {
Table table;
Item item;
clock_t t1, t2;
char buff[128];
int i, j, n;
/* ファイルからキーを読み込み keys[] に格納する。*/
for (n=0; n<N && fgets(buff, 128, stdin)!=NULL; n++) {
keys[n] = atoi(buff);
}
/* 表を用意する。*/
table = new_table();
/* 追加項目数と全項目の追加に必要な時間(秒単位)を印字する。*/
t1 = clock();
for (i=j=0; i<n; i++) {
item.key = keys[i];
j += add_item(table, item);
}
t2 = clock();
printf("%d %.3f\n", j, (double)(t2-t1)/CLOCKS_PER_SEC);
/* 探索成功数と全項目の探索に必要な時間(秒単位)を印字する。*/
t1 = clock();
for (i=j=0; i<n; i++) {
if (lookup_item(table, keys[i])!=NULL) j++;
}
t2 = clock();
printf("%d %.3f\n", j, (double)(t2-t1)/CLOCKS_PER_SEC);
/* 削除項目数と全項目の削除に必要な時間(秒単位)を印字する。*/
t1 = clock();
for (i=j=0; i<n; i++) {
j += remove_item(table, keys[i]);
}
t2 = clock();
printf("%d %.3f\n", j, (double)(t2-t1)/CLOCKS_PER_SEC);
return 0;
}
よろしくお願いします。
補足
だめなようです。