2016-11-04 2 views
-1

Hier werde der Code, der die Formel umsetzt (1 + x)^2:Segmentierungsfehler für den folgenden Code erhalten. Ich bin nicht in der Lage, herauszufinden, wo ich falsch

#include <stdio.h> 
#include <stdlib.h> 
#include "nCr.h" 
#include <time.h> 
#include <sys/time.h> 

int main(int argc, const char * argv[]) 
{ 
    int k = 0; 
    int n; 
    int c; 

    struct timeval start, end; 

    if (argv[1][0] == '-' && argv[1][1] == 'h') { 
     printf("Usage: formula <positive integer>"); 
    } else { 
     n = atoi(argv[1]); 

     // gettimeofday will give the execution time of program in microsecond. 

     gettimeofday(&start, NULL); 

     printf("(1 + x)^%i = ", n); 

     if (n == 0) 
      printf("0"); 

     for (; k <= n; k++) { 

      // Here nCr is an assembly code which compute coefficient 

      c = nCr(n, k); 

      if (c == -1) { 
       printf("Multiplication overflow. \n"); 
       return 1; 
      } else { 
       if (k != 0) 
        printf("%i x^%i ",c , k); 

       if (k != n && k != 0) 
        printf("+ "); 
      } 
     } 

     gettimeofday(&end, NULL); 

    } 

    printf("\n%ld microseconds\n", ((end.tv_sec * 1000000 + end.tv_usec) 
      - (start.tv_sec * 1000000 + start.tv_usec))); 

    return 0; 
} 

immer Segmentation Fault auf Linux gcc

+0

Starten Sie mit einem Debugger den Absturz "in Aktion" zu finden, wo es in Ihrem Code passiert. –

Antwort

2

Es kann geschehen, weil Sie versuchen, auf nicht vorhandene Argumente zuzugreifen. Bevor Sie auf Argumente zugreifen, fügen Sie argc check hinzu.

Verwandte Themen