Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果发生任何运行时错误,为什么会返回垃圾值?_C - Fatal编程技术网

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

C 如果发生任何运行时错误,为什么会返回垃圾值?,c,C,在C中,我发现如果发生运行时错误,将返回一个垃圾值。但为什么在这种情况下会返回垃圾值呢 此代码将给出运行时错误。我知道这里为什么会发生运行时错误。但是我想知道为什么返回值是垃圾值 #include<stdio.h> int main() { int *x; *x = 10; return 0; } #包括 int main() { int*x; *x=10; 返回0; } 如果将x声明为指针,则不应执行此操作如果不知道指针是什么,则如果将指针指向有效位置,

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

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

#include<stdio.h>

int main()
{
    int *x;
    *x = 10;
    return 0;
}
#包括
int main()
{
int*x;
*x=10;
返回0;
}

如果将
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;
}

上面的程序将输出
10
指针
x
指向存储
y
的地址,因此修改它,也将修改
y
这不是垃圾值,它是针对分段错误的Microsoft Windows错误代码;0xC0000005()

x
未初始化,因此它可能指向操作系统授予您的程序访问权限的内存之外,因此您在取消引用它时会遇到访问冲突。在Linux上,您可能会看到139(SIGSEGV),具体取决于操作系统和编译器


编辑:请注意,您的
main
没有返回此值-进程将被操作系统终止。

您可以解释发生了什么运行时错误吗?因为您没有处理错误并访问未初始化的变量,例如
scanf(“%d”)和&value)
如果忽略返回值,函数将无法读取,
value
未初始化,您可以转到
printf(“%d\n”,value)。如果您得到一个运行时错误,那么如何确定您得到的是垃圾返回值?你是说
echo$?
在运行程序后返回垃圾吗?请看这里:@iskarjarak你真的应该在问题中添加你正在使用的Windows和编译器(也可以链接到问题正文中的该图像)。这个问题很重要,我知道,兄弟。我想我很了解指针。但它与返回的垃圾值有什么关系?:)请注意,您可以通过捕获异常(或*nix中的信号)并返回不同的值来修复此问题。我认为在默认情况下,像这样的异常(或*nix中的SIGSEGV)会被转发到exit(.)函数,返回值是异常代码,而不是返回值。OP需要阅读基本的编程书籍。@iharob好吧,至少它不是他的
main
的返回值。它很可能是某个地方的返回值(确切地说,发生的情况取决于操作系统,我对Windows不太了解)。这个问题可能会有很大的改进,但cmd确实说,
”进程返回了。。。(0xC0000005)
所以他问问题的方式背后有一个合理的理由。
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *x;
    int  y;

    x  = &y;
    *x = 10;

    printf("%d\n", y);

    return 0;
}