错误存档

来源:互联网 发布:php轻量级论坛 编辑:程序博客网 时间:2024/05/01 21:11

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

 

 

 


 

原创粉丝点击