#include<stdio.h> int main () { int *ip; printf("Enter a no \n"); scanf("%d",ip); printf("ip=%d",*ip); }
以上是我的程序,当我运行它时输出
./a.out Enter a no 10 Segmentation fault
我在gdb第6行检查了问题是什么
的scanf( “%d”,腹膜内);
所以我推断ip是一个指向整数的指针,%d期望一个地址值.
虽然我试图将一个整数传递给ip指定的值,所以我认为这是错误的.但在上述情况下,正确的做法是什么.我想使用扫描并为ip指向的地址分配一个整数值(在我的情况下,它丢失了).
解决方法
David Heffernan的解决方案是正确的.但是,如果要使用指针(了解指针的工作原理),则必须使用“malloc”手动分配变量.
#include <stdio.h> #include <stdlib.h> /* for malloc and free */ int main (void) { int *ip = malloc(sizeof(int)); /* declare and allocate a new int pointer */ printf("Enter a no \n"); scanf("%d",ip); printf("ip = %d",*ip); free(ip); /* free the memory */ return 0; }
malloc()和free()位于stdlib.h中.当你声明:
int *ip;
你只需要指定一个指向“无”的指针.所以你必须用malloc()分配必要的内存.之后,* ip指向新的内存位置,ip是新内存位置的地址.
当您不再需要带free()的变量时,必须手动释放内存.