Ошибка сегментации (дамп ядра) при использовании моей собственной структуры с указателями на массив - PullRequest
0 голосов
/ 12 декабря 2018

Здравствуйте, вы можете сказать мне, почему компилятор успешно строится, когда есть только один номер_сталины a, но когда я объявляю еще один номер_параметра b и делаю точно такие же вещи, он показывает Ошибка сегментации (ядро сброшено) .Я не понимаю что не так?Я не могу объявить другой тип типа largenumber, потому что он показывает ошибку сегментации

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


struct largenumber{
    int numbers[200];
};
typedef struct largenumber largenumber;

void insert_number_to_largenumber(int* start, int* end, char *char_number){
  int* pointer;
  int i=0;
  printf("array elements\n");
  for(pointer=start; pointer!=end; pointer++){

    switch (char_number[i]) {
      case 48 :
        *pointer = 0;
        break;
      case 49 :
        *pointer = 1;
        break;
      case 50 :
        *pointer = 2;
        break;
      case 51 :
        *pointer = 3;
        break;
      case 52 :
        *pointer = 4;
        break;
      case 53 :
        *pointer = 5;
        break;
      case 54 :
        *pointer = 6;
        break;
      case 55 :
        *pointer = 7;
        break;
      case 56 :
        *pointer = 8;
        break;
      case 57 :
        *pointer = 9;
        break;
       default:
       fprintf(stderr, "array element is not a digit!\n");
       exit(EXIT_FAILURE);
    }

    printf("a.numbers[%d] = %d \n", i, *pointer);
    i++;


  }
}

int main()
{
  char* number1;
  printf("input first number\n");
  scanf("%s", number1);
  largenumber a;
  insert_number_to_largenumber(a.numbers, a.numbers+strlen(number1), number1);


    return 0;
}

1 Ответ

0 голосов
/ 12 декабря 2018

Вы используете number1 неинициализированный,

Используйте

char *number1 = malloc(32);

или

char number1[32];

перед вызовом scanf, также используйте спецификатор ширины в порядкечтобы избежать переполнения буфера:

scanf("%31s", number1);
...