C语言中Linux下段异常

C语言中Linux下段错误
#include <stdio.h> 
#include <netdb.h> /*包含相关的头文件。*/ 
#include <string.h>
 
int main() 

  struct protoent *pro; /*定义一个表示协议的结构体指针。*/ 
  int i; 
 
  for(i=0;i<5;i++) /*循环。*/ 
  { 
  pro=getprotobynumber(i); /*取得协议信息。*/ 
  printf("protocol name : %s\n",pro->p_name); /*协议名。*/ 
  printf("protocol number : %d\n",pro->p_proto); /*协议号。*/ 
  printf("protocol alias: %s\n",pro->p_aliases[0]); /*别名。*/ 
  } 


运行环境为ubuntu11.04 .运行没问题出现。
把 for(i=0;i<n;i++) 如果n>8的数就出显示0到6的数据接着显示段错误。
出现这个问题的原因是什么。
UDP number 17 


------解决方案--------------------
编译的时候加-g,然后gdb调试一下吧。
------解决方案--------------------

#include <stdio.h>
#include <netdb.h> /*包含相关的头文件。*/
#include <string.h>
 
int main()
{
struct protoent *pro; /*定义一个表示协议的结构体指针。*/
int i;
 
for(i=0;i<5;i++) /*循环。*/
{
pro=getprotobynumber(i); /*取得协议信息。*/
if(pro == 0)
{
printf("protocol name : fail\n");
continue;

printf("protocol name : %s\n",pro->p_name); /*协议名。*/
printf("protocol number : %d\n",pro->p_proto); /*协议号。*/
printf("protocol alias: %s\n",pro->p_aliases[0]); /*别名。*/
}
}