设置一个值,指针会导致程序崩溃
问题描述:
#include <stdio.h>
int main()
{
int* n;
*n = 20; // causes the crash
printf("%d\n", *n);
return 0;
}
但出于某种原因,如果我先设置INT * N =然后我就可以用*更改值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
答
你为什么不能设置使用该指针的值的原因是因为它没有指向的内存地址呢,你需要使用malloc和给它的东西指向。
希望这有助于:d
E.g
#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;
}
它*访问一个空指针会导致程序崩溃*。 –
你有一个指向无处的指针并存储它指向的值。问:你在哪里存储价值? – Olaf
注意,第二个例子是一样异乎寻常的第一个例子坏,并调用未定义的行为,就像第 - 您使用的是未初始化的指针,当你这样做,可以发生任何事情。不能保证当你做错事情时程序会崩溃,但这是常见的反应。另一个常见的反应是它似乎有效,但它所做的不是你想要的。 –