关于动态分配的数组问题。。。。
c语言吧
全部回复
仅看楼主
level 4
边城高战 楼主
想弄的数组是需要一个存储单元就增加一个存储单元的那种,自己弄了一个,但是到第三次分配就出错了。求解释。。。
#include<stdio.h>
#include<malloc.h>
typedef int *ElemType;
void create(ElemType &a)//a[0]存储的是数组长度
{ a = (ElemType)malloc(sizeof(int));
a[0] = 0;
}
void insert(ElemType &a)
{
a = (ElemType)realloc(a,(a[0]+1)*sizeof(int));
a[0]++;
scanf("%d",&a[a[0]]);
}
void load(ElemType a)
{
int i;
for(i = 1;i <= a[0];i++)
printf("%d ",a[i]);
printf("\n");
}
int main()
{
int i,n;
ElemType a;
scanf("%d",&n);
create(a);
for(i = 1;i <= n;i++)
insert(a);
load(a);
printf("%d",a[0]);
return 0;
}
2013年06月16日 13点06分 1
level 9
&a[a[0]]似乎超界了。另外,每次只多分配一个单元,不觉得效率太低吗?为什么不多几个?
2013年06月16日 13点06分 2
只输入2个的话没有超界啊,然后第三个执行realloc那一段就失败了。我只是觉得这样不会浪费存储空间而已。。。。
2013年06月16日 13点06分
把scanf("%d",&a[a[0]]);注掉是可以分配了。。。但是不太懂为什么会越界。。
2013年06月16日 13点06分
@边城高战 但你浪费了时间。一般可以翻倍分配的,比如第一次4个,不够时再8个,再不够就16个。超界不代表运行出错,你确定前2次没有超界?a[0]是数组长度,a[a[0]]这不是超界是什么?
2013年06月16日 13点06分
回复 bsod :原来是这样, - -居然没注意到这个。。。。开始建立时分配少了一个。。
2013年06月16日 13点06分
1