日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中报段错误(核心已转储)的常见问题

發布時間:2023/12/31 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中报段错误(核心已转储)的常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在c語言指針的使用過程中,常常會見到段錯誤的情況,這是由于指針指向的內存空間存在問題引起的。

1.野指針

(指向一塊未知區域的指針,被稱為野指針,引用野指針,可能會破壞系統的關鍵數據,導致系統崩潰等嚴重后果)

#include <stdio.h>int main(int argc, char const *argv[]){int *p;//野指針,沒有指向一塊明確的地址空間*p = 100;//這里會出現段錯誤(內存錯誤)因為p時沒有指向地址空間的,系統會隨機分配一塊//對其賦值操作的話,就屬于非法訪問printf("%d\n", *p);return 0;}

為了避免這種情況,我們要在定義的時候就要初始化指針變量。或者為其賦值為NULL

?

2.指針越界

指針越界這種情況,一般在數組中常見,指針指向的地址超出了數組所申請的內存空間,造成指針越界(屬于非法訪問)

?

3.指針所指向的內存,被系統回收

這種情況常見于指針函數,返回一個指針變量的時候發生。

解決:盡量不要讓返回的指針指向局部變量,局部數組和形式參數。

#include <stdio.h>int * test(int *arr); int main(int argc, char const *argv[]) {// 段錯誤演示int arr[10]={0,1,2,3,4,5,6,7,8,9};//調用函數int *p2=test(arr);return 0; }int * test(int *arr)//一般用int arr[]定義形參 {int arr1[10]={0};//初始化數組// 將數組倒敘輸出for (int i = 0; i < 10; ++i){arr1[10-i]=arr[i];}int *p=arr1;return p; } /* 1.在上面的代碼中,調用了一個返回值為函數的指針變量 2.函數調用后,會立即釋放局部變量,所以導致指針p指向的地址無效,導致段錯誤的發生 */

注意:上面代碼的釋放局部變量,不是指的馬上銷毀這些空間里面的數據,而是指的放棄了對這塊空間的使用權限。

比如:

#include <stdio.h>int *func(){int n = 100;return &n; }int main(){int *p = func(), n;/*1.運行這個代碼發現照樣可以訪問到n的值2.這不和前面說的放棄了對數據的使用權相悖了嗎? 答:不是3.這里可以訪問到,完全是巧合,因為在后面的代碼中,沒有其他的再去申請這塊地址的使用權4.如果我們在 int *p = func(), n; 的后面加一句printf("cai_grass的博客");就會導致段錯誤。5.為什么:因為調用了printf()函數過后,會把后面的空間占據,導致p指針指向發生錯誤 */n = *p;printf("value = %d\n", n);return 0; }

?

4.通過指針去定義數組后更改數據 ? 發生的段錯誤

#include <stdio.h>int main() {//定義一個字符數組 修改其中一個位置的值 運行結果正確char name1="caiqiang";name1[1]='M';//通過指針的方式定義然后再去修改 就會報段錯誤 // char *name="caiqiang";// name[1]='M';// *(name+1)='M'; //這和name[1]='M'都表示一樣的操作/*這是為什么吶?1.通過數組的方式,我們先合法的申請了一段地址空間來存儲數據 存儲的是變量2.指針定義的話 是直接指向了字符串常量 我們知道 常量是不可變的 所以不可更改 */return 0; }

5.總結:

  • 指針定義時,及時初始化
  • 絕不引用已被系統回收的內存
  • 確認所申請的內存邊界,謹防越界
  • 總結

    以上是生活随笔為你收集整理的C语言中报段错误(核心已转储)的常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。