gpt4 book ai didi

c - 我在执行此未分配指针取消引用时遇到典型错误

转载 作者:行者123 更新时间:2023-11-30 18:27:57 24 4
gpt4 key购买 nike

看下面的代码:

#include<stdio.h>
void function ();
int main()
{
int * a;
*a=9;//this is supposed to give error as I am trying to
// dereference an unallocated pointer
// but it does not
printf("%d",*a);
function();
}
void function()
{
int * a;
*a=9;//this gives an error as I am trying to
// dereference an unallocated pointer
printf("%d",*a);
return;
}

输出为 9,然后程序崩溃...为什么?main() 和 function() 的区别对于main(),我们声明一个指针类型,那么在不使用calloc或malloc的情况下,它是默认分配的内存吗?

最佳答案

您要么很幸运地获得了未初始化的数据,要么您的编译器正在优化指针。

当你做这样的事情时

int *a;
*a = 9;
printf("%d\n", *a);

编译器可以将其转换为

puts("9");

因为它可以知道并看到所有的值。

这可能就是您的函数调用版本崩溃的原因。因为编译器必须生成一个可以被其他代码模块调用的函数。

这类事情会根据编译器、编译器版本,当然还有提供给编译器的标志而有很大差异。

关于c - 我在执行此未分配指针取消引用时遇到典型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51108370/

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