当前位置:编程学习 > C/C++ >>

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语言中结构体的问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,