錯誤存檔

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

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章