2014-12-02 3 views
0

Я прочитал об ошибке сегментации, но я до сих пор не зная, почему этот простой код дает мне эту ошибкуСегментация вина C

#include <stdio.h> 
#include <unistd.h> 
#include <sysexits.h> 
#include <stdlib.h> 
#include <string.h> 

int main (int argc, char *argv[]){ 

     if(argc == 2){ 
      double i; 
      char *finalPtr; 
      double h = strtod(argv[2], &finalPtr); 
      for(i=1;i<=h;i++){ 
        printf("\t%g\n", i); 
      } 
      return 0; 
      exit(EX_OK); 
     } 
return 0; 
} 

Я supose это из-за *finalPtr, но я не понимаю, почему. Кажется, я действительно не понимаю использование памяти в C ...

ответ

6

Как вы проверяете, только для двух аргументов командной строки.

double h = strtod(argv[2], &finalPtr);

должно быть:

double h = strtod(argv[1], &finalPtr);

Это потому, что: argc == 2 что подразумевает количество аргументов командной строки 2 где
первый аргумент ARGV [0] будет имя исполняемого/двоичного файла, а второй аргумент argv [1] - команда lin е Arg передается пользователем

+0

спасибо. Я был обманут указателями, и я не видела этой ошибки! –

+0

@marckamoedo: Welcome –

+0

@marckamoedo быть хорошим и достойным и принять этот ответ, а не только вы вознаграждаете ответчика, но и будущие потенциальные айыки увидит, что в этом вопросе решение найдено – 4rlekin

0

компенсировано 0

В любое время, Remeber это.

См. Это как mem, + 1 * argv.

+0

правильный ответ, но я не вижу смысла отвечать на уже ответный (существенный) вопрос, особенно с чуть менее информативным ответом, чем принятый – 4rlekin

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