[英]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.