关于realloc问题

luxurioucsc 2009-06-19 11:08:47
这程序的意思是现在一个顺序表内输出内容,然后要在这个顺序表内再插入一个是数字,这是要用realloc来增加一个空间
但是,输出的结果却不正确,除了顺序表的第一个位置,和插入位置的内容是正确的,其余的都是一个负数。这是什么问题造成的?

#include <stdio.h>
#include <malloc.h>

#include "list2.h"

main()

{
struct sqlist p1;

int *newbase,*newbase1 ,*q,*p;

int i;

int e=9;

newbase=(int *)malloc (sizeof (4));

if (!newbase) return 0;

p1.elem=newbase;

printf ("Input the number in the sqlist p1 --");

while (i<4)
{
scanf ("%d ",&p1.elem[i] );
i++;
}

printf ("\n");

for (i=0;i<4;i++)
printf ("p1->%d ",p1.elem[i]);

printf ("\n\n");

//realloc

newbase1=(int *)realloc(p1.elem,(4 +1)*sizeof(int));


if (!newbase1) return 0;

p1.elem=newbase1;

q=&p1.elem[2];

for(p=&p1.elem[4];p>=q;p--)
{

*(p+1)=*p;

}

*q=e;

for (i=0;i<5;i++)

printf ("p1->%d ",p1.elem[i]);

}
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyyapple 2009-06-19
  • 打赏
  • 举报
回复
  if (!newbase1) return 0;  // 1. 返回没有释放内存

p1.elem=newbase1;

q=&p1.elem[2];

for(p=&p1.elem[4];p>=q;p--)
{

*(p+1)=*p; // 2. 开始时赋值越界了

}
xyzooo 2009-06-19
  • 打赏
  • 举报
回复
for(p=&p1.elem[4];p>=q;p--)
{

*(p+1)=*p; ——改上面两处,这里还是会越界的,for(p=&p1.elem[3];p>=q;p--)
logiciel 2009-06-19
  • 打赏
  • 举报
回复
修改2处就好了:

1.
newbase=(int *)malloc (sizeof(int) * 4); //newbase=(int *)malloc (sizeof (4));

2.
i = 0; //新加
while (i <4)
luxurioucsc 2009-06-19
  • 打赏
  • 举报
回复
那要怎么改呀?
luc_cj 2009-06-19
  • 打赏
  • 举报
回复
估计是越界以后,产生的问题

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧