C 避免指针问题的最佳实践
与指针相关的程序员错误的实际结果是什么 当程序员创建指针错误时会产生什么“坏影响”C 避免指针问题的最佳实践,c,pointers,C,Pointers,与指针相关的程序员错误的实际结果是什么 当程序员创建指针错误时会产生什么“坏影响” 最好使用带有代码的实际示例。归根结底,这就是访问未指定给它的内存区域。在分配区域外读/写,取消对未初始化指针的引用。基本上就是这样 也存在对指向的对象类型的错误解释,但这通常需要一些努力才能避免被编译器责骂 内存泄漏,但情况不同,这是关于分配,而不是指针本身。 从 我想我是从字面上理解了说明请求。当指针被误用时,可能会出错的事情: 内存泄漏-您在方法中分配指针,然后让它超出范围,而没有正确地解除分配它。指向堆上内
最好使用带有代码的实际示例。归根结底,这就是访问未指定给它的内存区域。在分配区域外读/写,取消对未初始化指针的引用。基本上就是这样 也存在对指向的对象类型的错误解释,但这通常需要一些努力才能避免被编译器责骂 内存泄漏,但情况不同,这是关于分配,而不是指针本身。 从
我想我是从字面上理解了说明请求。当指针被误用时,可能会出错的事情:
我不知道你是否还能做到这一点,但我记得几年前,我们编写了一个脚本,通过清除整个RAM使系统崩溃。我们就是这样做的
int *i;
while(1){
*i = 0;
i++;
}
至少我记得我们是这样做的。不过,我相信它现在不会起作用。只要初始化指针变量,良好的清理将消除99%的问题。我指的是良好的清洁;释放内存并将指针变量设置为null
否则,您需要一个关于指针的传递以及负责清理内存的代码的清晰设计。如果您最终不知道什么代码将是最后一个使用内存的代码&应该清理,那么您就有了一种设计气味,为了保持理智,您需要对其进行修复。原始指针是有害的。无法知道它们是否有效(悬空指针),它们是否已被初始化(如果在初始化时未设置为NULL,它们可能会显示为实际指向某个对象),并且不清楚谁有责任释放它们指向的资源(例如,调用方检索或函数返回指针) 没有聪明的指针我一天也活不下去。std::auto_ptr当我转移所有权时(明确责任),boost::shared_ptr当所有权被共享时,boost::weak_ptr当只有人“观察”资源时。
- 千万不要忽视任何警告
- 使用like
- 最重要的是:使用-他们经常警告指针的不正确使用,打破数组边界,等等“我确保在这些方面没有错误,即使程序似乎正在工作
- 取消引用错误指针时的结果是未定义的,因此根据定义当指针出错时,任何事情都可能发生。这就是为什么尽可能避免使用它们的原因
C-ish语言是围绕指针的使用而设计的,它们现在占主导地位,所以对一些人来说,这听起来像是疯狂的建议。我建议人们研究那些设计用来最小化指针使用和检查常见错误的语言,比如Ada
我最喜欢的指针轶事如下:我曾在佛罗里达州的一个小组工作,该小组在新墨西哥州的库尔特兰空军基地(大部分在大陆的另一边)对3架太阳神探测器进行了网络飞行模拟。有一天突然出现了一个崩溃错误。当地的现场技术人员无法修复它,所以大约一个月后,我们的一名工程师乘飞机过来查看。两周后,他感到困惑,于是又有一个人被拉了进来。又过了一个月,我们的高级工程师也被派去帮忙了
又过了一个月(公司一直在支付3人的住宿费、租车费和每两个周末飞回来的费用),他们发现了这个问题。结果是有人在索引数组末尾的一个(C也没有索引检查)。然后,他们抓起那个位置的垃圾,通过网络将其传递给第二台机器,而这台机器正在使用那个值