70,034
社区成员
发帖
与我相关
我的任务
分享#include<stdio.h>
#include<malloc.h>
void f(int **q)
{
*q=(int *)malloc(sizeof(int));//为什么不去掉这行 该程序编译就回出错?
int i;
i=10;
*q=&i;
}
int main(void)
{
int *p;
f(&p);
printf("%d\n",*p);
return 0;
}除了第二条和语言规范,C标准有关外,其他都是逻辑错误.
有些会产生严重的运行时错误.1)分配的内存被替换,因而无法释放,内存泄漏.这是严重错误.
2)C,和C++有所不同,C变量声明定义要在其他执行语句之前,C99不清楚还是不是这样.
3)返回和传出函数局部自动变量的地址,是危险的行为,
因为变量的生命周期已经结束了,引用他的行为是错误的(这是个死魂灵了).
4)不是分配的内存,被释放掉,是个错误,至少逻辑是错误的.
很简单,你不分配内存,如何用?道理很简单,你指者一个空盆说,这是一盆水,然后你就用手去触摸水。有水的感觉嘛?没有!只有加满水,才能舒服摸摸!
“这是一盆水”——声明一个指针,”加水“——分配内存!“触摸水”——访问内存!”摸水的感觉“——读取内存数据!晓得?
务必区分指针变量和存储数据的变量void f(int **q)
{
*q=(int *)malloc(sizeof(int));//为什么不去掉这行 该程序编译就回出错?
// int i;
// scanf("%d",&i);
// *q=&i;
scanf("%d", *q);
}