【发布时间】:2015-03-05 12:10:43
【问题描述】:
这是我的菜单驱动程序的部分代码。 每当我尝试删除一个字段时,它都会被删除,但我会收到分段错误(核心转储)错误。 例如:如果我的记录列表是:
/*Student Name [0]: x
Student age [0] :1
Student Name [1]: y
Student age [1] :2
Student Name [2]: z
Student age [2] :3
Student Name [3]: f
Student age [3] :4*/
我在使用 printf 打印新列表后删除了记录 1:
/*Student Name [0]: x
Student age [0] :1
Student Name [1]: z
Student age [1] :3
Student Name [2]: f
Student age [2] :4
Student Name [3]: ( null )
Segmentation fault (core dumped)
and exits the program.*/
int delete_posi ()
{
int posi;
int c=0;
int i;
printf("Enter the position to delete element:\n");
scanf("%d",&posi);
if ( posi >= MAX_NUMB+1 )
printf("Deletion not possible.\n");
else
{
for(c=posi;c<MAX_NUMB;c++)
ptr[c]=ptr[c+1],
ptr[c+1]=NULL;
}
}
//printing records , the struct contains Name,age
int printlist()
{
int i;
if(student_numb==0)
{
printf("List is empty\n");
}
for (i=0;i<student_numb;i++)
{
printf("*********************************\n");
printf("Student Name [%d] : %s\n",i, ptr[i]->Name);
printf("Student Age [%d] : %d\n",i, ptr[i]->age);
}
}
【问题讨论】:
-
请格式化您的代码。
-
你不应该在删除指针时更改
student_numb变量吗?或者至少检查NULL指针。 -
您的错误主要是针对这一行
if ( posi >= MAX_NUMB+1 )当您执行此操作时for(c=posi;c<MAX_NUMB;c++)else 部分。 -
@JoachimPileborg,谢谢,插入 student_numb——解决了问题。