【发布时间】:2018-08-20 01:27:01
【问题描述】:
我的头被指针缠住了,我在这段代码上遇到了分段错误,没有明显的原因。 基本上这是可行的:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a;
printf("Please enter a number: ");
scanf("%i", *(&a));
printf("1st number is: %i\n", *a);
}
这不是:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *a, *b;
printf("Please enter a number: ");
scanf("%i", *(&a));
printf("Please enter the second number: ");
scanf("%i", *(&b));
printf("1st number is: %i\n", *a);
printf("2nd number is: %i\n", *b);
}
为什么?
【问题讨论】:
-
指针是数据的地址。指针现在指向哪里?它是否指向正确的内存地址?
-
您的代码的第一部分不起作用。见coliru.stacked-crooked.com/a/4b4f6f10ed7d4a1a
-
valgrind是一个了不起的工具,您可以在它下运行您的程序。字面意思就是valgrind ./a.out,它经常会告诉你像这样犯过的简单错误。