以下都是我在使用Devc++的過程中出現過的錯誤,通過查找資料解決問題,今天小小地記錄、整理一下。 1.[Error] invalid conversion from 'const char*' to 'char' [-fpermissive] 出現該錯誤的原因是:使用字元串操作函數 strcmp, ...
以下都是我在使用Devc++的過程中出現過的錯誤,通過查找資料解決問題,今天小小地記錄、整理一下。
1.[Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
出現該錯誤的原因是:使用字元串操作函數 strcmp,strcpy時傳入的必須是指針
例如 :strcmp(a[i],"f"),這是錯的,因為a[i]是值,不是指針,應該改為strcmp(&a[i],"f")
2.[Error] 'malloc' was not declared in this scope
出現該錯誤的原因是:使用malloc()函數時需要添加頭文件#include<stdlib.h>,可能free()函數也是,因為也報了類似的錯誤
3.Program received signal SIGSEGV,Segmentation fault.報錯
該錯誤出現在我調試的過程中,錯誤出現的原因指針未初始化或越界,訪問到未分配地址空間。
不過,雖然知道了錯誤出現的原因,這個問題曾經還是困擾了我很久,下麵,我分享一下我與該錯誤的鬥爭經過,以下代碼是修改正確後的
1 typedef struct //數組存儲型順序棧,存儲數據int型 2 { 3 int data[Maxsize]; 4 int top; 5 }IntStack; 6 void InitStack(IntStack **s) //數據為int型的棧的初始化 7 { 8 *s=(IntStack *)malloc(sizeof(IntStack)); 9 (*s)->top=-1; 10 }本來照著課本上使用c++的&引用符可以寫成void InitStack(IntStack *&s),然而,我保存文件時保存成.c文件了,於是c++的引用符就用不了了,一旦使用就會出現編譯錯誤。於是,第一次,我去掉了&符號,改成使用指針,改成了void InitStack(IntStack *s),發現編譯過了,但是運行起來是錯誤的,沒有結果輸出,返回值也是錯誤的(如果運行成功應該返回0,然而它卻返回一大串隨機數字)
然後,我就開始調試,在進行到第六行時得到這個錯誤。下麵是我自己的理解:
首先,我在main函數中定義了一個 IntStack *s=NULL ,並將其初始化為NULL,如果我是用void InitStack(IntStack *s)函數,調用時就要寫InitStack(s),那麼實際上我是將s中的值傳到了函數中,而s中的值是NULL,將NULL傳入到函數中,這不是我想要的。
實際上,InitStack函數的調用結果,我想要的是,申請一塊可以存儲IntStack型結構體的空間,並將這塊空間的地址保留到s中,以便通過s進行進一步的訪問,所以,malloc函數得到的地址其實應該作為s的值,賦給s,於是,我們需要傳入的就是s的地址,也就是二級指針,具體函數如上,調用時就寫成InitStack(&s),然後。。妥了,其實也確實是指針越界導致的錯誤啦,畢竟你啥也沒傳進去嘛,還想調用,想太多了。。。。
4.[Error]ld returned 1 exit status
出現錯誤的原因可能有:
1.是你的程式已經在運行,關閉原來的程式就可以正常了
2.你機器上有殺毒(安全)軟體阻止了你程式的生成,退出殺毒(安全)軟體再試下。
3、檢查聲明函數名與定義的是否一致,最好複製過來。5.[Error]expected declaration or statement at end of input
可能錯誤:
1.某一個函數或者變數沒有在使用之前聲明。
2.某個地方少了個括弧。即括弧不匹配。調試過程中不一定是游標提示處括弧不匹配,可能是附近模塊。
6.文件包含錯誤
這個主要是理清文。件間的包含關係,避免重覆包含。我現在一般是用Devc++建工程,就三個文件,一個頭文件,三個.c文件,其中一個是main文件,兩個是放函數的文件,然後在.c文件中都包含.h文件就可以了。
7.bool類型在C語言中的使用
如果想要在Devc++上寫C語言,又想用bool類型(C語言貌似是沒有bool類型的哦),那麼可以通過添加頭文件 #include<stdbool.h> ,這樣就可以使用bool了。
初入道不久的小白,如有紕漏,望請指正。