我在ubuntu 14.04 LTS上使用gcc编译器来编译以下c程序
#include<stdio.h>
void main()
{
int *a,*b;
*a=2;
*b=3;
printf("\n printing address.....\n address of a = %d \n address of b = %d \n",a,b);
printf("\n\n printing values ..... \n value of a = %d \n value of b = %d \n",*a,*b);
}
当我在程序之上运行而不是在输出中跟随
output: Segmentation fault (core dumped)
请建议我在哪里做错了。
感谢
答案 0 :(得分:5)
您正在声明并使用指针(指向内存),而不为它们分配空间。
宣布:
m/(a|b|c)/i
没有给你使用内存,这只是声明一个可以引用内存的变量。
指针一旦声明,就会取消初始化,并指向不属于你的某些内存部分。使用该内存 - 在您的情况下,将值放在那里 - 将导致未定义的行为;当你触摸那个记忆时,你会看到核心转储。
为了获得一些空间,请了解int *a;
:
malloc
答案 1 :(得分:0)
声明指针时
int* p;
它类似于声明整数变量:
int v;
v
的内容未初始化 - 与p
相同 - 它也未初始化,因此当您使用p
时*p
您可能在内存中的任何位置取消引用地址,即使在只读内存中也是如此。相反,您需要初始化变量。
int v = 0;
int* p = &v; // p points to v in memory