c语言分段错误空指针,C语言空指针总结 - 祂的小哥哥的个人空间 - OSCHINA - 中文开源技术交流社区...
空指針就是指向不可訪問區域的的指針,它的值為NULL,地址一般是內存的首地址。詳情見代碼1、2及其運行結果。
NULL是標準庫定義的等于0的常量符號。
不可訪問和內存的劃分有關。系統會在每個程序被調用的時候為它分配一個內存段,這個內存段是物理地址經過偏移計算得來的,用來映射程序的所有內容。其中,空指針指向的內存地址和實際的物理地址不存在映射,也就是通過空指針所指向的地址找不到對應的物理地址。
空指針的應用。指針在被創建時會隨機指向一個內存地址,如果不加限制可能造成非法訪問、寫越界(寫越界的危害自己想象)。所以指針被創建的時候通常會指向一個有意義的內存。如果暫時沒有用到,則賦值為NULL,表示處于閑置狀態,不指向任何有意義的對象。同時指針指向的內存被釋放的時候也需要講指針置空,否則指針將對一個已經釋放的內存繼續保有訪問的權限,同樣具有安全問題。
空指針的危害。空指針指向不可訪問的區域,如果程序使用空指針進行訪問,將會導致程序出錯、中斷。詳情見代碼3及其運行結果。在使用一個指針變量的時候對其進行非空判斷可以避免這種情況。這也是通常的做法。
代碼1及其運行結果
#include
#include
int main()
{
//char * str = (char*)malloc(sizeof(char)*5);
char * str = NULL;
printf("str1 is %s\n", str);
printf("str2 is %x\n", &str);
getchar();
return 0;
}
代碼2及其運行結果
代碼3機器運行結果
#include
typedef struct
{
int a_;
int b_;
}test_;
void test(test_* str)
{
int a = str->a_;
int b = str->b_;
printf("a is %d, b is %d\n");
}
int main()
{
test(NULL);
getchar();
return 0;
}
總結
以上是生活随笔為你收集整理的c语言分段错误空指针,C语言空指针总结 - 祂的小哥哥的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 茶花树多少钱一棵树(大树)?
- 下一篇: c语言le后能跟变量吗,【C语言】C语言