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

来源:互联网 发布:站长交易第一平台源码 编辑:程序博客网 时间:2024/04/18 10:49


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会移动,所以要明白指针目前指向

原创粉丝点击