繁体   English   中英

将值设置为指针会导致程序崩溃

[英]Setting a value to pointer causes program to crash

#include <stdio.h>

int main()
{
     int* n;
     *n = 20; // causes the crash
     printf("%d\n", *n);
     return 0;
}

但是出于某种原因,如果我首先设置 int* n = i 那么我可以使用 *n = 20 更改该值,这是有原因的吗?

 int i = 19;
 int* n;
 *n = i;
 *n = 20;

编辑:谢谢大家帮助我从你的回答中学到了很多东西。

int* n;
 *n = i;

不,您所看到的(在您的两个示例中)都是undefined behavior 的结果。 上面你没有初始化指针指向一个有意义的内存 - 通过应用*运算符,你正在取消引用指针并告诉它向它指向的内存写入一些值,但是因为你没有让它指向有效内存- 你不能通过那个指针来写。

这样就好了

int x = 0;
int* n = &x; // Now your pointer points to valid memory
*n = 5; // Value of x will be 5 now

是的,这是有原因的。 当你声明:

int* n;

指针n无处显示。 因此,当您尝试通过以下方式设置其值时

*n = 20;

当您尝试访问无处显示的指针内容时,程序崩溃。


另一方面,当你声明

int i = 19;
int* n;
n = &i;

你让指针n显示到某个有效地址 所以当你之后分配

*n = 20;

您实际上访问了有效内存地址的内容。

您不能使用该指针设置值的原因是它尚未指向内存地址,您需要使用 malloc 并为其提供指向的内容。

希望这会有所帮助:D

例如

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int *n;

    n = malloc(sizeof(int));

    *n = 20;

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

    system("pause");

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM