2017-03-14 4 views
-5

Warum gibt dieser Code einen Segmentierungsfehler aus?Drehen des Arrays mit C

Dies ist Code mit for Schleife für Linksverschiebung der angegebenen Array bei Stdin durch keine Rotationen.

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

int *rotatebyone(int *array_input, int len_of_arr); 
void rotate(int *array_input, int len_of_arr, int no_of_rota); 
int main() 
{ 

    int array1[] = { }; 
    int array2[] = { }; 
    int array3[] = { }; 
    int i = 0, j = 0, size_of_arr = 0, no_of_rotations = 0; 

    for (i = 0; i < 2; i++) 
    { 
     scanf("%d", &array1[i]); 
     //printf("%d", array1[i]); 
    } 

    size_of_arr = array1[0]; 
    no_of_rotations = array1[1]; 

    for (i = 0; i < size_of_arr; i++) 
    { 
     scanf("%d", &array2[i]); 
     //printf("%d ", array2[i]); 
    } 
    rotate(array2, size_of_arr, no_of_rotations); 

    return 0; 
} 
void rotate(int *array_input, int size_of_array, int no_of_rota) 
{ 
    int h = 0; 
    for (h = 0; h < no_of_rota; h++) 
    { 
     rotatebyone(array_input, size_of_array); 
    } 
    for (h = 0; h < size_of_array; h++) 
     printf("%d ", array_input[h]); 
} 

int *rotatebyone(int *array_input1, int len_of_arr) 
{ 
//int array3 = {}; 
    int j = 0, k = 0; 
    int temp = 0; 
    temp = array_input1[0]; 
    for (k = 0; k < len_of_arr - 1; k++) 
    { 
     array_input1[k] = array_input1[k + 1]; 
    } 
    array_input1[len_of_arr - 1] = temp; 
    return array_input1; 
} 
+4

'int array1 [] = {};' ... wirklich? –

+1

'int array1 [] = {};' -> 'int array1 [2] = {0};' – BLUEPIXY

+2

'intarray2 [] = {};' -> 'intarray2 [size_of_arr];' und verschieben nach 'size_of_arr = array1 [0];' – BLUEPIXY

Antwort

0

Für Array2 [] haben Sie seine Größe nicht erwähnt. Es kann evn 1000 oder 10000 sein. Bessere Verwendung von int * array2 und Zuweisung von Speicher durch malloc. Reg array1, kann als int array1 [2] initialisiert werden, da wir wissen, dass zwei Elemente für array1 da sind.