成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十種初學(xué)者最常見的c語言段錯(cuò)誤實(shí)例及原因分析

開發(fā) 前端
段錯(cuò)誤相信是每一個(gè)C語言初學(xué)者都會(huì)遇到的一個(gè)問題,很多初學(xué)者看到這個(gè)錯(cuò)誤就開始抓狂。但是沒寫過段錯(cuò)誤的程序員不是個(gè)合格的程序員!

段錯(cuò)誤相信是每一個(gè)C語言初學(xué)者都會(huì)遇到的一個(gè)問題,

很多初學(xué)者看到這個(gè)錯(cuò)誤就開始抓狂。

但是沒寫過段錯(cuò)誤的程序員不是個(gè)合格的程序員!

一口君寫了這么多年代碼,有時(shí)候還是會(huì)出現(xiàn)段錯(cuò)誤。

下面給大家整理了一些C 語言典型的段錯(cuò)誤(Segmentation Fault)實(shí)例及代碼示例,按常見場景分類說明:

1. 引用空指針

#include <stdio.h>
int main() {
    int *p = NULL;
 
    printf("%d\n", *p); // 解引用空指針
    return 0;
}

原因:p 未指向有效內(nèi)存地址。

2. 訪問受保護(hù)的內(nèi)存地址

int *p = (int*)1;  // 強(qiáng)制將指針指向地址 0x1
*p = 100;          // 訪問系統(tǒng)保護(hù)的內(nèi)存區(qū)域

原因:嘗試操作內(nèi)核或系統(tǒng)保留的內(nèi)存區(qū)域。

3. 修改字符串常量

char *str = "hello";  // 字符串常量存儲(chǔ)在只讀區(qū)
str[0] = 'H';         // 嘗試修改常量區(qū)數(shù)據(jù)

原因:字符串字面量存儲(chǔ)在只讀內(nèi)存段,不可被修改6。

4. 棧溢出

void infinite_loop() {
    infinite_loop();  // 無限遞歸導(dǎo)致棧空間耗盡
}
int main() 
{ 
 infinite_loop(); 
}

原因:無限遞歸導(dǎo)致棧內(nèi)存溢出6。

5. 數(shù)組越界訪問

int arr[5];
arr[5] = 10;  // 合法索引為 0~4,越界訪問無效內(nèi)存

原因:訪問超出數(shù)組定義大小的內(nèi)存區(qū)域。

#include <stdio.h>
 
int main() { 
    int arr[5] = {0, 1, 2, 3, 4};
 
    printf("%d\n", arr[10]); // 訪問不存在的元素
    return 0;
}

執(zhí)行結(jié)果:未定義行為,可能會(huì)導(dǎo)致程序崩潰或打印出垃圾值。

數(shù)組越界是一些新手最容易出錯(cuò)的地方,經(jīng)常因?yàn)閿?shù)組下標(biāo)控制不好,導(dǎo)致訪問越界,而這種情況可能99%幾率不是立刻報(bào)段錯(cuò)誤,也可能程序運(yùn)行幾年都不報(bào)錯(cuò), 但是它一旦報(bào)了錯(cuò),就會(huì)特別隱蔽,非常難查。

剛工作的時(shí)候在zte,曾經(jīng)有2位大佬追一個(gè)德國運(yùn)營商現(xiàn)場報(bào)的bug,花了一個(gè)月時(shí)間,最后發(fā)現(xiàn)是數(shù)組越界導(dǎo)致。

6. 使用未初始化的指針

int *p;        // 未初始化指針
*p = 42;       // 野指針指向無效地址

原因:指針未指向有效內(nèi)存空間。

7. 訪問已釋放的內(nèi)存

int *p = malloc(sizeof(int));
free(p);
*p = 10;       // 內(nèi)存釋放后繼續(xù)使用

原因:操作已被釋放的動(dòng)態(tài)內(nèi)存區(qū)域。

8. 緩沖區(qū)溢出

char buffer[5];
strcpy(buffer, "HelloWorld");  // 超出 buffer 容量

原因:字符串操作超過目標(biāo)緩沖區(qū)大小。

9. 雙重釋放內(nèi)存

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

free(p);
free(p);  // 重復(fù)釋放同一塊內(nèi)存

原因:多次釋放同一內(nèi)存導(dǎo)致堆管理器異常。

10. 強(qiáng)制類型轉(zhuǎn)換錯(cuò)誤

int num = 42;

char *p = (char*)num;  // 將整數(shù)值強(qiáng)制轉(zhuǎn)換為地址
*p = 'A';              // 訪問非法地址

原因:將非指針類型強(qiáng)制轉(zhuǎn)換為指針并解引用。

11.格式化字符串與參數(shù)類型不匹配示例

int data = 0;
sprintf(buf,"%s",data);

12、忘記字符串結(jié)尾的空字符示例:

#include <stdio.h>
 
int main() {
 
    char str[5] = {'H', 'e', 'l', 'l', 'o'}; // 缺少 '\0'
 
    printf("%s\n", str);
    return 0;
}

執(zhí)行結(jié)果:未定義行為,可能會(huì)打印出亂碼直到遇到一個(gè)’\0’。

13、緩沖區(qū)溢出示例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[5];
    
    strcpy(dest, "Hello, World!"); // 目標(biāo)緩沖區(qū)太小
    printf("%s\n", dest);
    return 0;
}

執(zhí)行結(jié)果:未定義行為,可能會(huì)崩潰或覆蓋內(nèi)存。

14、未檢查類型大小示例:

#include <stdio.h>
 
int main() {
    char *p = (char *)malloc(10 * sizeof(int));
    int *q = (int *)p; // 錯(cuò)誤的假設(shè)char和int大小相同
 
    for (int i = 0; i < 10; ++i) {
        q[i] = i; // 可能導(dǎo)致內(nèi)存越界
    }
 
    free(p);
    return 0;
}

執(zhí)行結(jié)果:未定義行為,可能會(huì)導(dǎo)致內(nèi)存越界。

15、變量未正確初始化示例:

#include <stdio.h>
 
int main() {
    int num = 123;
 
    printf("%s\n", num); // 錯(cuò)誤的格式化字符串,應(yīng)為%d
    return 0;
}

執(zhí)行結(jié)果:未定義行為,可能會(huì)打印出任意值。

16、忽視錯(cuò)誤返回值示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
 
    FILE *file = fopen("nonexistent.txt", "r");
    if (!file) {
        // 忽視錯(cuò)誤,沒有處理
    }
 
    // 使用file...
    fclose(file);
    return 0;
}

執(zhí)行結(jié)果:如果文件不存在,程序會(huì)嘗試使用未初始化的指針,可能導(dǎo)致崩潰。

總結(jié)

段錯(cuò)誤本質(zhì)是訪問了非法內(nèi)存地址,可通過以下方式避免:

  • 初始化指針并檢查有效性;
  • 避免越界操作數(shù)組或緩沖區(qū);
  • 謹(jǐn)慎處理動(dòng)態(tài)內(nèi)存的分配與釋放;
  • 區(qū)分常量區(qū)與變量區(qū)的數(shù)據(jù)修改權(quán)限
  • 對(duì)一些庫函數(shù)返回值一定要判斷
責(zé)任編輯:武曉燕 來源: 一口Linux
相關(guān)推薦

2015-12-21 11:45:27

C語言常見問題錯(cuò)誤

2022-10-19 23:18:27

KubernetesPod錯(cuò)誤

2025-04-07 01:35:00

Go語言程序

2020-08-16 20:36:21

滲透測試漏洞網(wǎng)絡(luò)攻擊

2022-07-22 15:55:32

Python代碼語言

2010-01-14 17:18:17

C++語言

2011-06-23 18:33:37

SEO

2010-10-18 09:30:55

2023-07-03 15:05:07

預(yù)測分析大數(shù)據(jù)

2019-10-08 09:00:00

MySQL數(shù)據(jù)庫

2010-03-10 17:09:26

Python語言

2023-01-17 09:27:18

Python語言

2011-06-08 09:37:19

C#Equals

2017-03-10 17:00:28

編程語言

2023-08-18 14:36:00

ChatGPT人工智能

2013-02-20 10:13:38

JavaJava初學(xué)者

2021-05-06 09:00:00

JavaScript靜態(tài)代碼開發(fā)

2011-07-12 13:01:00

CC++

2015-12-09 09:41:52

AngularJS開發(fā)錯(cuò)誤

2011-06-21 10:44:31

const
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产午夜视频 | 一区二区高清在线观看 | 久久乐国产精品 | 国产精品夜色一区二区三区 | 91精品91久久久 | 中文字幕在线免费视频 | 欧美一级视频 | 狠狠草视频 | 久久中文字幕一区 | 久久成人精品视频 | 国产99久久精品一区二区永久免费 | 天堂成人国产精品一区 | 91精品国产综合久久久亚洲 | 亚洲精品国产电影 | 国产在线色 | 国产精品免费av | 国产精品视频在 | 午夜免费网 | 中国毛片免费 | 亚洲欧美一区二区三区在线 | 亚洲一区二区久久久 | 亚洲不卡视频 | 亚洲在线一区二区三区 | 99久久久国产精品免费消防器 | 亚洲免费三级 | 亚洲精品视频免费观看 | 男女免费视频网站 | 狠狠狠色丁香婷婷综合久久五月 | 日韩精品在线播放 | 一区二区视频在线 | 久久男人天堂 | 农村黄性色生活片 | 6080yy精品一区二区三区 | 亚洲黄色国产 | 一区中文 | 国产精品一区免费 | 日韩在线视频免费观看 | 成人在线电影在线观看 | 久久精品99| 欧美a区| 国产激情网 |