您的位置:首页 > 其它

[置顶] 错误存档

2012-07-18 11:50 239 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: