您的位置:首页 > 编程语言

编程中经常错的地方(如果你的程序报错,却找不到,来这里看看)

2012-07-28 17:36 323 查看
1, struct 结构体和union联合体,一定要加‘;’

例:

struct node{
int num
};

,2, 如果使用if和while时,注意:

if(a=4);
{
printf("大家好\n");
}
while(a=4);
{
printf("大家好\n");
}


上面两个语法没问题,但逻辑有问题,if 和while使用时,不要习惯性地加‘;’

注意区分‘=’赋值和‘==’横等的区别

3,有时候可能会出现莫名其秒的段错误,这也是很头疼的;

可能性1:越界:你定义了一个变量char a[10],只有10个字节,如果你给他赋值10个字节以上的内容,系统就会报段错误

可能性2:野指针:你的指针没有初始化,也没明确指向一段内存,那系统会给他一个随机的地址。一旦你使用他,系统就会报错

因为这段地址可能是系统不允许访问的地址

可能性3:链表中:定义一个结构体指针,没有分配空间,那他还是个地址,

例:

struct node *p=NULL;
x = p->num ;          //这里就会报错,因为你没分配空间,*p只是一个结构体指针,是个地址,没有内存空间


4,注意while()和for(; ;)里面的控制是,满足条件才循环

n =7 ;                         for(int i=0;i>10;i++)
while(n<0)                     {
{
n--;
}                               }

不要带自己感觉地去写,认为满足条件退出

5,变量在定义时,注意初始化。全局变量,还好,系统会默认为0或NULL。若是局部变量时,不给他赋值,系统自动给一个垃圾值。

6,调用函数时,不要返回局部变量的地址,因为局部变量的资源,在函数调用后,就会释放,所以得不到你想要的结果。

例:

char * reserver_string()
{
char str[] = "hello!";
return str;
}
int main()
{
reserver_string();
return 0;
}

上可以程序,如果你编译,就会出现警告。如果你用一个char *temp;接收返回值,并打印*temp指向的内存,那你得到的将不会是“hello!”

7,文件读写 :文件读写时,*fp会移动,所以要明白指针目前指向
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐