簡體   English   中英

C程序指針未保存有效地址仍未給出分段錯誤

[英]C program pointer not holding valid address still not giving segmentation fault

由於我們嘗試訪問未分配給當前程序資源的地址,因此發生了C程序中的分段錯誤錯誤。

我正在嘗試使用以下代碼獲取細分錯誤。 而且我不明白為什么在主函數中最后一次調用函數check()不會產生分段錯誤。

#include <stdio.h>

int check(char * memptr);
int foo(char * memptr);

int main()
{
    char mem = 'a';
    char * memptr = NULL;
    char * cantcatch;
    check(&mem);                        // valid pointer
    check(memptr);                      // error case, but can be checked
    check(cantcatch);                   // error case, but can't catch
    return 0;
}

int check(char * memptr)
{
    if (NULL == memptr)
    {
        printf("\n  error, function foo() not called \n");
        return 1;
    }
    else
    {
        printf("\n After = %c, ret val = %d, Before = %c, Before = %d \n", \
        *memptr, foo(memptr), *memptr, *memptr);
    }
    return 0;
}

int foo(char * memptr)
{
    *memptr = 'b';
    return 0;
}

如果我嘗試打印'memptr'指針,那么它將給出該分段錯誤錯誤。

了解這一點的任何提示將大有幫助。

它取決於“ cantcatch”的值-未定義(隨機值)。 如果該值超出了程序的內存范圍,則該程序將出現段錯誤。

如果它在您的程序范圍內,則該程序不會崩潰,但可能導致內存損壞。

這些無效的讀/寫操作很容易被諸如“ Valgrind”之類的內存分析工具捕獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM