出現段錯誤的情況彙總

2021-08-20 02:38:16 字數 1110 閱讀 7461

1. 訪問陣列時超過陣列邊界

int data[20];

int n;

for (n = 0; n <= 20; n++)

上面宣告的陣列長度為20,但是卻會訪問data[20], 已經超過了陣列邊界,導致段錯誤出現。

2. 陣列的長度是負值

int imgwidth, imgheight;

long long len = imgwidth * imgheight;

char imgsize[len];

其中imgwidth, imgheight 很大,導致len算出來為負數,比如

imgheight=1997306112

imgwidth=2147483647

imgsize=-1997306112

buf分配失敗,導致segmentation fault

我這個程式在在嵌入式系統上執行,int, long , long long int型別資料的長度是一樣的。

3. 使用strcpy函式時不小心將dest buffer後面的空間覆蓋掉了。

char *strncpy(char *dest, char *src, size_t num);  會將src中的前num個字元拷貝到dest中, 可以用num限制拷貝長度,防止dest空間被意外覆蓋,較為安全。

char *strcpy(char *dest, char *src);   通常用於字串拷貝,會把src中的字元複製到dest所指空間,直到遇到\0為止。如果src字串長度大於dest陣列長度,那就很危險了。

注:還可以使用strdup()函式來代替上面的方法,但是使用完了之後一定要記得使用free釋放申請的空間。

#include char *strdup(const char *s);

//strdup函式實現

char * __strdup(const char *s)

例子:

char *src = "abcd";

char *new = strdup(src);

錯誤情況彙總

執行時出現的警告 st may be used uninitialized in this function st 為結構體 struct node st struct node 原因為 使用時 st 沒有建立空間 缺少 st struct node malloc sizeof struct nod...

可能傳送記憶體段錯誤的情況

在此羅列一些可能導致段錯誤的地方,以及如何避免相應的錯誤 出現段錯誤時,有的很容易調查,但有的很難調查,比如在乙個地方把記憶體寫錯,需要過一段時間另乙個地方讀這個記憶體時,才出錯。這種是非常難定位的。因此在編寫 時一定要小心預防。1 使用非法的指標,包括使用未經初始化及已經釋放的指標 指標使用之前和...

IIS無法啟動錯誤的幾種情況彙總

1 重新設定iis的iwam賬號密碼和iusr密碼。管理工具 計算機管理 本地使用者和組 使用者 2 同步iis metabase中iwam myserver的密碼,在cmd中 c inetpub adminscripts adsutil set w3svc wamuserpass yourpass...