C语言、指针的指针和野指针的问题
2012-02-27 15:38
253 查看
int _tmain(int argc, _TCHAR* argv[])
{
int * p = (int *) malloc(sizeof(int));
//*p = 10;
flee(p);
printf("%d",*p);
//释放p
free(p);
printf("----");
int * i = (int *) malloc(sizeof(int));
flee2(&i);
//释放i
printf("%d",*i);
free(i);
}
//入参为指针,仍为值传递,即副本。只有引用传递是传递p本身。
void flee(int *q)
{
//副本修改的是指针所指变量的值,而不是指针本身。
*q = 20;
//出栈时副本被自动销毁,而外面的P所指变量的值被改了,但指针地址实际上未改变。
}
void flee2(int **q)
{
//int i = 5;
////副本指向了一个新的位置,所以真正地修改了一个指针地址。但产生的一个问题是,原始定义的i产生了野指针。
//*q = &i;
//i =3;
if(q != NULL && *q != NULL)
{
*(*q) = 5;
}
}
{
int * p = (int *) malloc(sizeof(int));
//*p = 10;
flee(p);
printf("%d",*p);
//释放p
free(p);
printf("----");
int * i = (int *) malloc(sizeof(int));
flee2(&i);
//释放i
printf("%d",*i);
free(i);
}
//入参为指针,仍为值传递,即副本。只有引用传递是传递p本身。
void flee(int *q)
{
//副本修改的是指针所指变量的值,而不是指针本身。
*q = 20;
//出栈时副本被自动销毁,而外面的P所指变量的值被改了,但指针地址实际上未改变。
}
void flee2(int **q)
{
//int i = 5;
////副本指向了一个新的位置,所以真正地修改了一个指针地址。但产生的一个问题是,原始定义的i产生了野指针。
//*q = &i;
//i =3;
if(q != NULL && *q != NULL)
{
*(*q) = 5;
}
}
相关文章推荐
- c语言中的指针问题
- C语言中指针和自增运算符结合时的运算顺序问题
- C语言-二叉树-创建问题:指针的指针
- C语言结构体中指针的复制问题
- C语言指针问题
- C语言的一个笔试题:指针与数组的问题
- C语言研究性学习的路线之号外:一些朋友所提问题的反馈及第9章 指针
- 杨中科老师谈C语言指针问题快速解惑
- C语言指针问题
- C语言指针作为形参的一些问题
- C语言指针与数组的问题--初级
- C语言指针作为形参的一些问题
- C语言中 数组到底是不是指针和数组作为参数问题
- C语言中关于指针,二维数组等的问题,一个有趣的发现
- 嵌入式 Linux C语言(九)——C语言的安全问题和指针陷阱
- c语言的数组与指针问题
- c语言指针使用的注意问题
- 有关C语言指针访问问题
- C语言中动态分配数组指针的释放问题
- c语言指针一个日期的问题