在C中,我发现如果发生运行时错误,则返回垃圾值。但是为什么在这种情况下会返回垃圾值?
此代码将给出运行时错误。我知道为什么在这里发生运行时错误。但我想知道为什么返回值是垃圾值。
#include<stdio.h>
int main()
{
int *x;
*x = 10;
return 0;
}
答案 0 :(得分:5)
这不是垃圾值,它是分区错误的Microsoft Windows错误代码; 0xC0000005(STATUS_ACCESS_VIOLATION is the correct name)
x
未初始化,因此它可能指向操作系统已授予您访问程序的内存,因此在取消引用时会出现访问冲突。在Linux上,您可能希望看到139(SIGSEGV),具体取决于操作系统和编译器。
编辑:请注意,您的main
不会返回此值 - 操作系统会终止该进程。
答案 1 :(得分:1)
您将x
声明为指针,如果您不知道指针是什么,则不应该这样做,如果您将指针指向有效位置,您的代码将起作用,这样做就可以了使用malloc()
函数,这个
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *x;
x = malloc(sizeof(int));
if (x == NULL)
return -1;
/* use x here */
*x = 10;
/* release memory */
free(x);
return 0;
}
在你的代码中,指针x
没有指向有效的内存,所以它调用了未定义的行为,这就是垃圾值的原因。
指针是c语言中非常重要的一部分,我认为你需要搜索关于指针的基本教程。
这例如也是有效的
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *x;
int y;
x = &y;
*x = 10;
printf("%d\n", y);
return 0;
}
上述程序将输出10
指针x
指向存储y
的地址,因此修改它也会修改y
。