zoukankan      html  css  js  c++  java
  • [置顶] 错误存档

    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

     


     

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/cszlg/p/2910588.html
Copyright © 2011-2022 走看看