c语言程序设计。。。。。不能正常读取
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int *fun(int x);
void main()
{
int x;int *p ,*q;int i,j;
printf(" enter the data:");
scanf("%d",&x);
p=fun(x);
for(i=0;*(p+i)!='\0';i++);
for(j=0;j<i;j++)
printf("%d",*(q+j));
}
int *fun(int x)
{
int *ix;int i=0;
ix=(int *)malloc(sizeof(int)*100);
while(x>=10)
{
ix[i]=x&10;
i++;
x=x/10;
}
ix[i]=x;
return ix;
free(ix);
}
哪里出错了
答案:for(i=0;*(p+i)!='\0';i++); //是否多了个;号啊
for(j=0;j<i;j++)
printf("%d",*(q+j));
发现了一个最重要的问题!不能在函数中malloc,函数结束的时候 malloc空间自动释放了!
还有一个return ix;
free(ix);
先return 后free有意义吗?
因为函数结束后地址空间释放,p造成地址越界。程序崩溃!
其他:错误很多,我就把我发现的说一下吧:
1.fun(int x)函数中你申请了长为100的整型数组,但在return ix;之后函数已经返回,所以free(ix);
毫无作用
2.你写这句话for(i=0;*(p+i)!='\0';i++);想起到什么作用?,如果是为了判断数组中有几个元素的话,由于你是在堆中开辟了100个整型空间,但你没有给该空间初始化,所以都是随机值,并不一定是以'\0’结尾的。
3.printf("%d",*(q+j));这句话啥意思,你并没有给q赋值,怎么能输出了,应该是改为p吧。
上一个:求一c语言大作业 不少于300行
下一个:C语言中结构体的问题