• [置顶] 错误存档


    1.当n是short int ,m是long long int时,语句m=4*n,使用GNU,得到的m是short int的范围,因此当n稍大时,m就可能溢出。


    2.输出字符串时,遇到‘\0’结束输入,如果没有适当地设置'\0',可能会出现问题。比如有

    struct node
    {
        char s[10];
    }n[2];

    如果w[0].s中没有‘\0’,则scanf("%s",n[0].s)不会只输出n[0]中字符数组s中的内容,因为这一个输出语句是输出以n[0].s为首地址直到'\0'为止的内容。


    3.当用memset给char型以外的数组初始化时,只能初始化为0或-1。计算机中数字以补码形式存储,只有两种数值:0和1,0和-1的补码分别是0和1.


    4.i*=2+1;的含义是i=i*(2+1)而不是i=i*2+1.


    5.创建类的指针时不伴随内存分配,比如有类ClassA,创建指针:ClassA *p;则*p没有分配到一片大小为sizeof(ClassA)的内存空间。


    6.有程序:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        string s;
        s[0]='1';
        s+="234";
        cout<<s<<endl;
        return 0;
    }
    

    输出“1234”?NO!输出“234”。


    7.string  str; str="1"+"12";s="1";s+="234"; 可以;s="",s+="1",s+="234"也可以。


    8.getchar()能接收回车和空格


    9.scanf("%d%c", &n, &c);输入1然后回车,输出空行,表示c接收了空行;但是以下语句:

    scanf("%d %c", &n, &c);//只是%d和%c之间多了个空格,c就不会接收空格了!、


    10.如果输出字符串时莫名地多了一个空格,可能使'\0'作祟,因为执行cout << '\0';正正输出一个空格。执行以下命令cout << '\0' << 1 <<endl << " " << 1;就可以很清楚地看出输出'\0'和输出" "的效果一样。


    11.if(...)

           if(...)

           {

             ....

          }

        else(...){}

    else应该是和第一个if对应的,但是我在使用GNU编译器时运行结果却是和第二个if对应,导致出错。注意!!!改为

    if(...)

    {

           if(...)

           {

             ....

          }

    }

    else{...}

     

    12.有程序:

    #include <iostream>
    using namespace std;
    
    struct A
    {
    	int a;
    	A *link;
    };
    
    int main()
    {
    	struct A *n;
    	//struct A m;
    	//n = &m;
    	cin >> n->a;
    	cout << n->a;
    	return 0;
    }


    运行程序,输入1,内存就出错。这是因为,n只是一个struct A型的指针,只能储存结构体变量的地址,加上注释的部分代码就能正常运行。又或者给n动态分配内存:

    #include <iostream>
    using namespace std;
    
    struct A
    {
    	int a;
    	A *link;
    };
    
    int main()
    {
    	struct A *n;
    	n = new struct A; //添加的部分
    	cin >> n->a;
    	cout << n->a;
    	return 0;
    }


     13.

    #include <iostream>
    using namespace std;
    
    struct A
    {
    	int a;
    	A *link;
    	A(){link = NULL;}
    };
    
    int main()
    {
    
    	struct A *t;
    	//t = new struct A;
    	delete t;
    	return 0;
    }


     

    运行以上程序会出错,原因是t尚未分配到内存不能delete。加上注释掉的那部分程序就ok

     


     

  • 相关阅读:
    visual C sharp express from 360 free download
    Druid 在小米公司部分技术实践-博客-云栖社区-阿里云
    公司业务-猫眼知健康
    Sculptor
    可译网 —— 翻译可以更简单
    牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力
    设置Redis的LRU策略
    springboot中使用aop技术
    elasticSearch的部署和使用
    jvm原理和代码运行的过程
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910588.html
Copyright © 2020-2023  润新知