为什么以下代码产生分段错误?

时间:2015-04-08 19:33:01

标签: c segmentation-fault malloc

#include<stdio.h>
#include<stdlib.h>

  int main(void)
{

   int *ptr;
   int max;
   int i=0,number=0;

    printf("Enter the size of array \n");


  if( scanf("%i",&max) != 1)
{
     printf("number not enterd correctly\n");
     exit(EXIT_FAILURE);
}

     ptr=(int *)malloc(max * sizeof(int));


   if(ptr=NULL)
{ 

      puts("Error in recieving memory");
      exit(EXIT_FAILURE);
}

   else
{
    puts("Enter array");

    while(i<max &&  scanf("%d",&ptr[i]) == 1)
    ++i;

/*    number=i;
      puts("Array entered is ");
      for(i=0;i<number;i++)
      printf("%i  %i\n",i,ptr[i]);
*/


}

    puts("Done!");
    free(ptr);

    return 0;
}

程序正在成功编译而没有任何错误。运行程序并在输入数组中的第一个值后,程序终止分段错误。我在vmware上运行的ubuntu 12.04上使用gcc编译器。

1 个答案:

答案 0 :(得分:6)

if(ptr=NULL)应为if(ptr == NULL)。否则,您要将ptr设置为NULL并尝试访问它。通常编译器应该警告它。一些程序员使用以下方法来避免这种类型的错误: if(NULL == ptr)。在这种情况下,如果您忘记了一个=,您将收到编译错误。