c語言儲存錯誤原因的函式,什麼是c語言裡面的動態儲存分配函式啊?

時間 2022-08-09 13:06:53

1樓:匿名使用者

errno全域性變數提供錯誤編號

strerr()函式根據錯誤編號返回描述這個錯誤的字串perror()函式以友好的方式輸出這個描述錯誤的字串它們的具體用法請自行查詢。

2樓:知常軒

錯誤原因有兩個層面可以識別:

1.語言層面

2.系統層面(linux,windows,vxworks等)如:windows下:getlasterror();

3樓:匿名使用者

c語言標準庫中包含了各種用於處理錯誤的函式和巨集。

1、assert( ) 巨集

#include

void assert( int expression );

可用於診斷程式bug。expression可以是任何要檢測的東西:變數或任何表示式。

如果expression為true,則assert()不執行任何操作;否則在stderr上顯示一條錯誤訊息,並終止程式的執行。例:assert( x >= 0);為使assert( )巨集發揮作用,程式設計程式必須採用除錯模式。

以後以發行模式編譯程式的最後版本時,assert()將被禁用。

assert( )採取的動作取決於另乙個名為ndebug巨集(表示「不除錯」)。如果ndebug巨集未被定義(預設情況),則assert( )將處於活動狀態;否則assert( )將被關閉,因此不起作用。定義ndebug巨集的**如下:

#define ndebug

2、標頭檔案errno.h

標頭檔案errno.h定義了幾個巨集,用於定義和記錄執行錯誤。這些巨集將結合函式perror( )一起使用。

標頭檔案errno.h定義了乙個名為errno的外部int變數。如果執行時發生錯誤,c語言函式庫中的很多函式都將乙個值賦給該變數。

標頭檔案errno.h定義的符號錯誤常量

名稱 值 訊息和含義

e2big 1000 引數列表過長(超過128位元組)

eacces 5 沒有許可權(如,試圖寫乙個為唯讀的檔案)

ebadf 6 檔案描述符無效

edom 1002 數學引數超出範圍(將乙個不允許的值作為引數傳遞給數學函式)

eexist 80 檔案已經存在

emfile 4 開啟過多的檔案

enoent 2 沒有這樣的檔案或目錄

enoexec 1001 執行格式錯誤

enomem 8 記憶體不夠(如沒有足夠記憶體執行exec()函式)

enopath 3 路徑未找到

erange 1003 結果超出範圍(如數學函式值過大)

可以以兩種方式來使用errno。有些函式通過其返回值來指出發生了錯誤。在這種情況下,可以通過檢測errno的值來確定錯誤的性質,並採取相應的措施。

如果無法知道是否發生了錯誤,可以檢測errno。如果它不為0,則說明發生了錯誤,而errno的值指出了錯誤的性質。處理完錯誤後,一定要將errno的值重置為0。

3、perror( )函式

#include

void perror( const char *msg );

perror( )函式是c語言中另乙個錯誤處理工具,該函式在stderr上顯示一條訊息,指出庫函式呼叫或系統呼叫期間,最後發生的乙個錯誤。函式首先列印msg指向的一條可選的、使用者定義的訊息,然後是冒號以及實現定義的、描述最後發生的錯誤訊息;如果沒有錯誤,則顯示no error。函式不會根據錯誤來採取某種措施。

什麼是c語言裡面的動態儲存分配函式啊?

4樓:匿名使用者

不同的編譯系統所提供的多少不同。有的編譯系統放在malloc.h中,有的編譯系統放在stdlib.h中。常用的有如下幾種:

1.記憶體分配和釋放函式mall0c()和free()

這些函式前面已經出現過。malloc ( )函式的功能是動態地向記憶體申請指定大小的空間,所指定的大小用位元組數表示。其呼叫格式如下:

malloc(size)

其中,malloc是該函式名,size是用來表示所申請的記憶體大小的位元組數。該函式的返回值為void*型,即為某種型別的指標,使用時將其返回值強製成某種型別的指標。當申請成功時該函式返回所申請記憶體的緩衝區的首位址,否則返回null.

例如,實際中申請50個整型變數的記憶體空間可以這樣使用:

int * p;

p=(int*)malloc ( 50*sizeof (int));

if(p==null)

{prints("out memory!\n");

exit(1);

當申請記憶體空間時,總是要判斷一下是否申請成功。如果申請成功了,繼續往下進行;如果申請失敗,則應退出該程式。

free( )函式的功能是用來釋放使用mallac ( )函式分配的記憶體空間。由於機器中用來進行動態分配的記憶體空間是有限,及時釋放不用的記憶體空間是十分重要的。該函式呼叫格式如下:

free(p)

其中,free是該函式的名字,p是要被釋放的記憶體空間的首位址,也是使用。malloc ( )函式所分配的記憶體空間的返回值。執行該函式則使指標p所指向的記憶體區域被釋放。

5樓:魔尊

所謂動態分配,就是需要的時候再分配,這是相對於靜態分配而言的,靜態分配就是一次分配完畢,不管你用多少。而動態分配則是按需分配。

6樓:匿名使用者

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。

c語言動態記憶體分配相關的函式如下幾個:malloc、calloc、realloc、free;

malloc函式的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤**置為enomem。

calloc函式可以分配nr個size大小的記憶體空間,一般用於一組struct結構體的分配。

realloc函式將ptr指向的記憶體空間重新分配大小為size並返回新的記憶體首位址。

free函式釋放前三個函式申請的記憶體空間,所以,使用前三個分配函式分配的記憶體一定要free掉。

7樓:離離原上花開

malloc()

函式原型:

void *malloc( size_t size );

幫我查C語言的錯誤,C語言 程式設計後,有錯誤,怎麼檢視是那部分出錯了!

1,prodct沒宣告 2,應該用 不能用 3,注意每個語句末尾的分號 4,輸出整形要加 d include int prodct int a int b main int prodct int a int b include main 把函式體加個大括號就行了,c沒必要用,還有函式定義得放在呼叫前...

C語言中的圖形函式有哪些,C語言中的圖形函式是必須學的嗎?

一 畫素函式 putpiel 畫畫素點函式 getpixel 返回像素色函式 二 直線和線型函式 line 畫線函式 lineto 畫線函式 linerel 相對畫線函式 setlinestyle 設定線型函式getlinesettings 獲取線型設定函式setwritemode 設定畫線模式函式...

c語言的函式能不能呼叫全域性變數,C語言的函式能不能呼叫全域性變數?

當然可以呼叫全域性變數,這個程式報錯的原因是 x不是全域性變數 全域性變數就是在函式外面定義的變數,修改如下 include int x 注意這裡 void func int main void func int a x明顯是區域性變數,作用域只在main函式中x定義在函式外部時,才是全域性變數 比...

C語言中變數儲存型別有哪些,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍

自動 靜態 寄存 易失 一說是自動 auto 靜態 static 暫存器的 register 和外部的 extern 然而某認為extern是用來對編譯器進行宣告變數的,而不是定義。自動,靜態,外部,寄存在函式體內宣告的變數在預設情況下都是auto儲存型別 在 塊之間傳遞資訊的一種方法就是使用外部變...

執行的錯誤是什麼?急需答案 C語言

三處錯誤 一處語法錯誤 還有兩處是lb la沒定義 儲天真 int getelem int lb,int i,int e int locateelem int la,int e void listinsert int la,int e,int k int main int lb 5 if locat...