c程序中的分段错误(核心转储)

时间:2015-07-19 19:58:04

标签: c gcc ubuntu-14.04

我在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)

请建议我在哪里做错了。
感谢

2 个答案:

答案 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