C/C++每日一课 >> [原创]指针易犯错误集(初学者适用)(2005-05-08)

原创 2005年05月14日 17:06:00
/* C/C++每日一课*/
/*2005-05-08*/
/*来自 虚拟现实论坛 (http://www.3d-vr.com)*/
/*作者: srj2005*/

没有什么比混乱的指针带来的麻烦更多了.指针是一个好坏兼有的东西, 他的功能强大, 很多程序都需要他. 同时指针有时也会包含错误的值, 他可以是最难发现的bug.

因为指针错误如同恶梦一般, 所以这里讨论一些常见的指针错误:

1. 指针没有初试化:
/*this program is wrong*/
int main(void)
{
 int x, *p;
 x = 10;
 *p = x;
 return 0;
}
指针p没有赋任何值, 当执行*p = x的时候, 它包含一个未知值, 这使x的值被写到一个未知的内存单元.

2. 赋值写法错误:
/*this program is wrong*/
int main(void)
{
 int x, *p;
 x = 10;
 p = x;
 printf("%d", *p);
return 0;
}
这里原本是想输出x的内容, 结果却没有达到效果, 应该是 p = &x;

3. 错误的比较两个指针:
char s[80], y[80];
char *p1, *p2;
p1 = s;
p2 = y;
if(p1 < p2)...
不要试图通过一个对象的指针来比较对向的内容.

4. 操作越界:
int first[10], second[10];
int *p, t;
p = first;
for(t = 0; t < 20; ++t)*p++ = t;
这段代码在某些编译器下面可能可以正常工作, 但是其实是错误的. first只有10个元素,
但是循环却取到第20个去了, 虽然可能用户是试图给second赋值, 但是c语言并不保证两个数组在内存里面是连续的.

5. 多次循环使用一个指针的时候忘记赋初值:
/*this program is wrong*/
int main(void)
{
 char *p1;
 char s[80];
 p1 = s;
 do{
   gets(s);
   while(*p1) printf("  %d", *p1++);
  }while(strcmp(s, "done"));
 return 0;
}

程序想重复利用缓冲区s来保存每次输入的字符串, 但是没次循环结束后,忘记把p1置回到缓冲开始的位置, 造成很危险的故障.
正确做法:
/*this program is now correct.*/
int main(void)
{
 char *p1;
 char s[80];
 
 do{
   p1 = s;
   gets(s);
   while(*p1) printf("  %d", *p1++);
  }while(strcmp(s, "done"));
 return 0;
}

C\C++文件读取常用函数及新手易犯错误

1. C语言中,注意getline()和fgets()的区别,两者都是读取文件的一行。但是用法有所区别。 getline()的定义是 size_t getline(char ** s, size_t ...

【C++基础02】类中不写成员函数易犯错误模型

这个代码在vs10中编译不通过 vs13中编译通过执行乱码: class MyCircle { public: double r; double pi=3.14; double are...

C语言编程易犯错误集

  • 2010年09月09日 19:28
  • 35KB
  • 下载

java易犯错误.pdf

  • 2016年11月16日 21:36
  • 1.13MB
  • 下载

Java开发者易犯错误Top10

转自 http://www.csdn.net/article/2015-02-13/2823958 Top1. 数组转换为数组列表 将数组转换为数组列表,开发者经常会这样做: ...

数据挖掘十大易犯错误

  • 2012年03月30日 10:31
  • 27KB
  • 下载

Java易犯错误

  • 2016年04月23日 15:16
  • 643KB
  • 下载

Java开发者易犯错误

摘要:在Java中,有些事物如果不了解的话,很容易就会用错,如数组转换为数组列表、元素删除、Hashtable和HashMap、ArrayList和LinkedList、Super和Sub构造函数等,...
  • yztezhl
  • yztezhl
  • 2015年02月15日 11:03
  • 277

达内Java学习心得之易犯错误

  • 2015年11月03日 10:14
  • 81KB
  • 下载

c语言易犯错误

  • 2013年04月07日 10:25
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: C/C++每日一课 >> [原创]指针易犯错误集(初学者适用)(2005-05-08)
举报原因:
原因补充:

(最多只允许输入30个字)