#include
typedef struct
{
int data[1000];
int length;
}lv;
void su(lv *&l,int n)
{
int i;
l->length=0;
l=(lv *)malloc(sizeof(lv));
for(i=0;i
scanf("%d",&l->data);
l->length++;
}
}
int md(int item,lv *l)
{
int i=0;
while(i
{
i++;
}
if(i>l->length)
{
return 0;
}
else
{
return i+1;
}
}
int main()
{
lv *l;
int k,item,p,n;
scanf("%d",&n);
su(l,n);
scanf("%d%d",&item,&p);
k=md(item,l);
if(k==0)
{
l->data[n]=p;
}
else
{
int i;
for(i=n;i>=k;i--)
{
l->data[i]=l->data[i-1];
}
l->data[k]=p;
}
int q=0;
while(q<=n)
{
if(q==n)
{
printf("%d\n",l->data[q]);
}
else
{
printf("%d ",l->data[q]);
}
q++;
}
free(l);
return 0;
}
yongy1978 于 2014-06-16 15:07:06发表:
学习了,自己在编程时也经常遇到段错误!
guxinglei15 于 2013-09-25 13:41:46发表:
#include
{
length && l->data[i]!=item)
#include
#define ARRAY_LENGTH 1000
typedef struct
{
int data[ARRAY_LENGTH];
int length;
}lv;
void su(lv *l,int n)
{
if(l == NULL)
{
return;//此处做一个判空
}
if(n >=ARRAY_LENGTH)//越界
{
return ;
}
int i;
//l->length=0;
//l=(lv *)malloc(sizeof(lv));//内存泄露
for(i=0;i
scanf("%d", &l->data[i]);//数组直接是地址,不需要再次取地址
l->length++;
}
}
int md(int item,lv *l)
{
if(l == NULL)
{
return -1;//判空
}
int i=0;
while(i
{
i++;
}
if(i > l->length)
{
return 0;
}
else
{
return i+1;
}
}
int main()
{
lv *l = (lv *)malloc(sizeof(lv));
if(l == NULL)
{
return -1;//内存分配失败
}
memset(l, 0, sizeof(lv));//初始化
int k,item,p,n;
scanf("%d",&n);
su(l,n);
scanf("%d%d",&item,&p);
k=md(item,l);
if(n >= ARRAY_LENGTH)
{
return -1;//越界
}
if(k==0 )
{
l->data[n]=p;
}
else
{
int i;
for(i=n;i>=k;i--)
{
l->data[i]=l->data[i-1];
}
l->data[k]=p;
}
int q=0;
while(q<=n)
{
if(q==n)
{
printf("%d\n",l->data[q]);
}
else
{
printf("%d ",l->data[q]);
}
q++;
}
if(l != NULL)
{
free(l);
l = NULL;//避免野指针
}
return 0;
}
注意事项:
指针使用前,需要判空操作;
分配内存和释放内存最好在同一个层次上进行;
注意数组越界;
使用宏代替"魔数"
guxinglei15 于 2013-09-25 13:39:58发表:
如果有段错误,使用gdb跟踪一下,具体用法百度一下即可
guxinglei15 于 2013-09-25 13:39:23发表:
#include
{
length && l->data[i]!=item)
#include
#define ARRAY_LENGTH 1000
typedef struct
{
int data[ARRAY_LENGTH];
int length;
}lv;
void su(lv *l,int n)
{
if(l == NULL)
{
return;//此处做一个判空
}
if(n >=ARRAY_LENGTH)//越界
{
return ;
}
int i;
//l->length=0;
//l=(lv *)malloc(sizeof(lv));//内存泄露
for(i=0;i
scanf("%d", &l->data[i]);//数组直接是地址,不需要再次取地址
l->length++;
}
}
int md(int item,lv *l)
{
if(l == NULL)
{
return -1;//判空
}
int i=0;
while(i
{
i++;
}
if(i > l->length)
{
return 0;
}
else
{
return i+1;
}
}
int main()
{
lv *l = (lv *)malloc(sizeof(lv));
if(l == NULL)
{
return -1;//内存分配失败
}
memset(l, 0, sizeof(lv));//初始化
int k,item,p,n;
scanf("%d",&n);
su(l,n);
scanf("%d%d",&item,&p);
k=md(item,l);
if(n >= ARRAY_LENGTH)
{
return -1;//越界
}
if(k==0 )
{
l->data[n]=p;
}
else
{
int i;
for(i=n;i>=k;i--)
{
l->data[i]=l->data[i-1];
}
l->data[k]=p;
}
int q=0;
while(q<=n)
{
if(q==n)
{
printf("%d\n",l->data[q]);
}
else
{
printf("%d ",l->data[q]);
}
q++;
}
if(l != NULL)
{
free(l);
l = NULL;//避免野指针
}
return 0;
}
注意事项:
指针使用前,需要判空操作;
分配内存和释放内存最好在同一个层次上进行;
注意数组越界;
使用宏代替"魔数"