在C/C++中常见的错误

错误一:

语法错误:
1.将“==”写成了“=”
2.复合语句忘记加{ }
3.用数学表达式来写逻辑表达式
例如: 6<x<29
应写为6<x&&x<29
4.没有切换中英文

编译错误:
比如字符串中字符没有写规范,转义字符忘记加\等
这些错误一般编译器都会报错,比较容易进行改正。

错误二:

数组越界:
数组越界一般包含两种情况:
(1)写越界:
即数组长度大于定义时的长度,但是由于越界后的地址到底里面有什么东西我们不知道,我们如果将它改变了,而他又是很重要的数据,那么就会造成很严重的后果。
(2)读越界
即读到的地方不是数组内部的数据,有可能读出的是随机数,如果要用读到的数据,那么可能会得到一个错误的数据导致程序出错。

错误三

内存泄漏:

在写链表或者其他东西时我们会使用malloc来开辟出一块自己想要的空间,但当我们将这块空间使用完毕以后一定要用free来将其释放掉,不然这块空间会一直存在,如果这种情况一直发生,那么我们可以使用的内存空间会越来越小。

错误四

野指针:
我们定义一个指针时可以直接定义其指向,或者只定义指针而不定义其指向,比如 :
int a;
int* p=&a;
或者
int* p;
第二种情况就是只定义了一个指针而没有定义指针的指向,所以p中存放的地址就是一个随机地址,这个地址可能内存中并不存在,也可能是内存中一块重要数据的地址,这时候我们如果使用p的话,那就会很危险。
所以当我们定义指针时,如果不定义其指向的话,我们可以让其等于NULL,这样就不怕p会指向我们不知道的地方了。

错误五

访问空指针:

上面我们说过,如果一个指针没有说明其指向,建议让其等于NULL,但是如果指针为NULL时,我们就不能通过指针来访问该地区的数据,如果访问,系统会报错。
例如:
下面程序的输出结果是( )

#include <stdio.h>
#include <stdlib.h>
void MallocMem(char* pc)
{
pc = (char*) malloc (100);
 
return;
}
 
int main()
{ 
char *str=NULL;
 
MallocMem(str);
strcpy(str,"hello ");
strcat(str+2, "world");
 
printf("%s",str);
 
return 0; 
}

该程序运行时会崩溃。
因为char *str=NULL;是先定义了一个空指针,调用函数MallocMem(str)在传参时传的是str的值,所以这就是一个值传递,我们知道值传递时是不会改变变量原本的值的,所以尽管给pc开了一个100字节大小的空间,但是pc与str实际是两个变量,所以str的值还为NULL,给NULL里面进行拷贝和连接便会程序崩溃。

错误六

引用未初始化的变量:
有时候我们定义一个变量以后忘记对其进行初始化,这时候如果是局部变量,那么他会是一个随机值,如果是全局变量或者静态局部变量,那么他的值会是0.
这时候我们要使用这个变量的话得到的结果就可能是错的。

错误七

对指针偏移错误:
我们有时会通过指针来访问数组,对数组元素进行访问时也可以通过对指针的加减运算来访问。
但是要注意的是同类型指针只能减不能加,因为如果两个同类型的指针进行加法运算,那么得到的就是两个地址的合,这样是没有意义的。
还要注意不要对指针偏移过量,这样可能会造成数组越界。

错误八

函数返回值不能是一个局部变量的指针:

我们知道函数中的局部变量当函数执行结束时会被销毁,如果函数返回的是一个指向局部变量的指针,这时候局部变量已经被销毁了,该指针的指向就不是我们想要的东西了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值