2015-04-08 5 views
0
#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; 
} 

Программа успешно компилируется без каких-либо ошибок. При запуске программы и после ввода первого значения в массиве программа завершается с ошибкой сегментации. Я использую gcc-компилятор на ubuntu 12.04, работающий на vmware.Почему следующий код вызывает ошибку сегментации?

ответ

6

if(ptr=NULL) должно быть if(ptr == NULL). В противном случае вы устанавливаете ptr на номер NULL и пытаетесь получить к нему доступ. Как правило, компилятор должен предупреждать об этом. Некоторые программисты используют следующий метод, чтобы избежать таких ошибок: if(NULL == ptr). В этом случае, если вы забудете один =, вы получите ошибку компиляции.

+0

oops спасибо, что указали это. –

+0

Как побочный эффект 'free (ptr);' не освобождает память, так как вы потеряли указатель. –

+0

В этом случае, что будет бесплатным (ptr); так как теперь он указывает на null? –

Смежные вопросы