2014-09-03 6 views
-3

Почему я получаю runtime eror при запуске этого кода в gcc-компиляторе ?? Он отлично работает в turboC. Я работаю над этим пару дней без каких-либо успехов. Незлая помощь.Ошибка выполнения во время компиляции

#include<stdio.h> 

int main() 
{ 
int T,i=0,num,sum,temp,j; 
int *N; 
scanf("%d",&T); 
while(i++<T) 
{ 
scanf("%d",N); 
temp=*N; 
while((*N)-->0) 
{ 

    sum=0; 
    num=(*N)+1; 
    for(j=0;j<64;j++) 
    { 
    if(num&1) 
     sum+=1; 
    num=num>>1; 
    } 
if(((*N)+1+sum)==temp) 
    break; 
} 
printf("%d\n",((*N)<0)?-1:(*N)+1); 

} 

return 0; 

}

+2

Что линия является ошибка? Вы запустили его в отладчике, чтобы узнать? Одна вещь, которая, несомненно, является проблемой, заключается в том, что 'N' является указателем, который не инициализирован, чтобы указывать на что-либо. Почему это не просто int? –

+0

Подробнее о [неопределенном поведении] (http://en.wikipedia.org/wiki/Undefined_behavior). Ваша программа получила некоторые. –

+1

Если вы скомпилировали свою программу с включенными предупреждениями, то у вас появятся некоторые подсказки: – wRAR

ответ

2

заголовочного файл

# include <stdlib.h> 

Выделяет память для указателя перед его использованием.

int *N; 
N = (int *)malloc (sizeof (int)); 

Free выделенной памяти после использования его

free (N); 
+2

Лучше не использовать указатель. Я не вижу причин, по которым это необходимо в этом коде. –

+1

Поскольку он использует его, возможно, для него требуется, пусть он использует, но правильно. – Adarsh

+0

Я использовал указатели, чтобы сократить время выполнения ниже 1 секунды. я не мог сделать это с int. –

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

  • Нет связанных вопросов^_^