关于vc6.0中申请数组地址的问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 04:27:43
#include <stdio.h>
#include <stdlib.h>

void main()
{ int *a;
int x,i,j;
scanf("%d",&x);
a=(int *)malloc(20 * sizeof(int));//获得基址
for(i=0;x!=0;i++)//0作为结束标志
{ a[i]=x;
scanf("%d",&x);
}
for(j=0;j<=i;j++)
printf("%d",a[j]);
}
请问这种申请方式有错吗?
我没有学过c++,只学过c,
如果只用c编写的话,又想使用malloc函数,如何做呢?
这个程序用vc6.0(兼容c)调试的时候有问题,到底错在什么地方?
还会出现“First-chance exception in 65464.exe: 0xC0000005: Access Violation.”
并且在tc界面出现很多数。

指定了20个空间的啊
系统应该会自动释放,我只用了一下而已。

我想用输入0作为结束条件而不是要输入20个数之后才结束。

malloc()是C语言中动态存储管理的一组标准库函数之一
如果只用c编写的话,又想使用malloc函数,那直接使用就是了啊

//输入数据没有控制在申请的大小之内,而且使用过后没有释放申请的空间
#include <stdio.h>
#include <stdlib.h>

void main()
{
int *a;
int x,i,j;
scanf("%d",&x);
a=(int *)malloc(5 * sizeof(int));//获得基址
for(i=0;x!=0&&i<5;i++)//0作为结束标志
{
a[i]=x;
scanf("%d",&x);
}
for(j=0;j<i;j++)
printf("%d",a[j]);
free(a);
}

系统不会自动释放,如果你的内存都被分配完了,那么就会发生内存泄露...
还有,你是以X是否为0为结束符的,如果你都不输入0,那么将会发生堆溢出!!!
你应该限制输入长度...

数组赋值的时候判断条件应该为i<20,而不是原来的x!=0
建议多看看c方面的书哈