70,020
社区成员




#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);
}