如果发生任何运行时错误,为什么返回垃圾值?

时间:2015-02-16 01:50:16

标签: c

在C中,我发现如果发生运行时错误,则返回垃圾值。但是为什么在这种情况下会返回垃圾值?

此代码将给出运行时错误。我知道为什么在这里发生运行时错误。但我想知道为什么返回值是垃圾值。

#include<stdio.h>

int main()
{
    int *x;
    *x = 10;
    return 0;
}

2 个答案:

答案 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