[英]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.