错误一:

一种错误的写法:

int * x = (int *)malloc( * sizeof(int));
int * y = (int *)malloc( * sizeof(int)); y = x;

没有必要为y开辟内存,因为y在开辟内存时 y内存储的地址时开辟的内存的位置, 但是后面又把x的值赋给了y, y原本的内存值失去了控制。

而再 free(y); 时, free的其实是x开辟的内存,整个过程都失控了。

正确的写法是

int * x = (int *)malloc( * sizeof(int));

y = x;
...
free(x);

错误二:

引用不能乱用。

typedef struct RBNode
{
RBNode *parent, *left, *right;
DataType key;
int color;
}RBNode; void change(RBNode * &x) //错的 不应该加引用
{
RBNode * y = x -> right;
y -> parent = x->parent;
} void main()
{
RBNode *n1 ,*n2,*n3;
n1 = (RBNode *)malloc(sizeof(RBNode));
n2 = (RBNode *)malloc(sizeof(RBNode));
n3 = (RBNode *)malloc(sizeof(RBNode)); n1->parent = NULL;
n1->left = NULL;
n1->right = n2;
n1->color = ; n2->parent = n1;
n2->left = NULL;
n2->right = n3;
n2->color = ; n3->parent = n2;
n3->left = NULL;
n3->right = NULL;
n3->color = ; change(n1); }

上面代码的原本目的是令n2的parent变成n1, n1不变。 但实现的效果是 n1 变为 NULL 了。

原因在于引用:  由于引用 y->parent 完全等于 x 即 &y->parent == &x == &n1  即它们只是名字不一样罢了。 y->parent = x->parent 的写法就是 x = x->parent.  x变成NULL了。故出错。

去掉引用后,结果就正确了。 因为没有引用时 x 只是 n1的一个副本 &x != &n1 != &y->parent。 y->parent = x->parent 只是y的parent指向了x的parent指向的位置,对n1没有影响。

【C语言】指针的更多相关文章

  1. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  2. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  3. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  4. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

  5. (转载)c语言指针学习

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  6. 关于C语言指针的问题

    在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  7. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  8. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...

  9. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

  10. C语言指针声明探秘

    C语言指针声明探秘

随机推荐

  1. nyoj 4 ASCII码排序 java

    java输入字符:1.String s=sc.next(); 2.char a=s.charAt(0); 注意:package   java 中提交不能带package java代码: import ...

  2. CF #305 (Div. 2) C. Mike and Frog(扩展欧几里得&&当然暴力is also no problem)

    C. Mike and Frog time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  3. JSON格式转换(javascript)

    使用ajax从后台抓取数据后,如果有多个值,可以使用json传值. ajax例子如下,在返回的类型里面,可以是文本型(text),JSON格式(json),超文本类型(html),XML文件类型(xm ...

  4. Svn + tomcat + Hudson持续集成部署

    1.首先下载hudson 2. 我这里使用hudson-3.0.1版本 3. 下载后hudson是一个 war 包 4. 操作部署: (1). 直接将hudson的war包复制到tomcat的weba ...

  5. input多选计算

    CSS代码: body { counter-reset: icecream; } input:checked { counter-increment: icecream; } .total::afte ...

  6. 三. 动态添加option选项

  7. buildroot 制作Linux文件系统初级使用教程

    buildroot 下载地址:https://buildroot.org/download.html 放在Linux文件下解压出来. 使用make menuconfig 进行配置相关的东西. 在使用这 ...

  8. mysql查看字段注释(帮助信息)指令

    select column_name,column_comment from INFORMATION_SCHEMA.columns where table_name='my_table'; 或者 sh ...

  9. C++数学、信号处理相关库

    1.Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法.功能强大.快速.优雅以及支持多平台. http://www.oschina.net/p/arma ...

  10. C#之设置无边框后如何移动窗体(转)

    转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html 第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左 ...