|
|
发表于 2012-11-4 00:15:55
|
显示全部楼层
我已经对你的代码整理了一下,并加上了一些解释,如果有其他问题,请回复提问
- # include <stdio.h>
- # include <malloc.h>
- void f(int *pArr, int i);
- void g(int *pArr, int i);
- int main(void)
- {
- int i;
- printf("请输入你要定义的数组大小:\n");
- scanf("%d", &i);
- int *p = (int *)malloc(sizeof(int) * i);
- free(p); //上一行刚申请到的空间,这里马上就释放掉了???建议释放后要p=NULL;将p指向空指针
- f(p, i); /*上一行free(p);已经把p指向的空间释放了,为什么这里还要去使用释放掉的空间???
- 为什么这里不出错?因为就算房子拆了,但是房子所在的那个地址,还是存在的
- 所以仍然可以使用那块空间,但是这样做是很危险的,所以要p=NULL */
- g(p, i); //同上
- free(p); //释放内存是正确的,但是!!千万不要对同一块空间释放2次!!!!
- return 0;
- }
- void f(int *pArr, int i)
- {
- printf("请输入数组每个数的值!\n");
- int j;
- for (j = 0; j < i; ++j)
- scanf("%d", &pArr[j]);
- printf("输入完毕!!\n");
- }
- void g(int *pArr, int i)
- {
- int j = 0;
- for (j = 0; j < i; ++j) //
- printf("%d ", pArr[j]);
- }
复制代码
补充内容 (2012-11-4 01:19):
int *p = (int *)malloc(sizeof(int) * i);
free(p);
不是说申请了不能马上释放,这是绝对没问题的
问题就只有2个:
1.释放了的空间再次使用
2.对同一块空间释放2次 |
|