gpt4 book ai didi

不持有有效地址的 C 程序指针仍然没有给出段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:16 24 4
gpt4 key购买 nike

C 程序中出现段错误是因为我们试图访问未分配给当前程序资源的地址。

我试图用下面的代码得到一个段错误。而且我无法理解为什么在 main 函数中最后一次调用函数 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”之类的内存分析工具捕获。

关于不持有有效地址的 C 程序指针仍然没有给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com