SIGABRT (сигнал SIGABRT) во время работы malloc

#arrays #c #function #pointers #malloc

Вопрос:

Проблема в программе возникает, когда malloc запускается несколько раз. Я получаю ошибку: SIGABRT (signal SIGABRT) . Я рассматривал подобные вопросы, но пока ничего не помогло.

Программа проста, поэтому, если хотите, вы можете просто перейти к программе ниже. Я также дал объяснение, если оно вам может понадобиться.

пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, и я обязательно на них отвечу.

В программе объяснялось:

В основном у меня есть массив указателей (строка), где каждый указатель указывает на строку, представляющую строку. Затем я вызываю функцию для получения строк из входных данных.

Функция getlines имеет два цикла for, один внутри другого.

  1. Внешний цикл перемещается к следующему указателю в массиве указателей. Поскольку каждый указатель представляет собой строку, он перемещается на следующую строку в конце внутреннего цикла.
  2. Внутренний цикл добавляет символы до конца файла или до достижения новой строки. Он также проверяет, чтобы строка не превышала МАКСИМАЛЬНУЮ строку.
    1. В начале внутреннего цикла malloc используется для добавления указателя внутри массива, который будет ссылаться на строку (строку).
    2. Затем символы добавляются из входных данных и связываются с этим указателем.

Ниже приведена программа:

 #include lt;stdio.hgt; #include lt;stdlib.hgt; #include lt;ctype.hgt; #define MAXLINES 100 #define MAXLINE 100  int main() {  char *line[MAXLINES];  getlines(line); }  void getlines(char **line){  int c = 0;  char *l = 0;  for(;c!= EOF; line  ) {  for (*line = NULL; (l - *line) != MAXLINE amp;amp; (c = getchar()) != EOF amp;amp; c != 'n'; l  ) {  if (*line == NULL) {  *line = malloc(sizeof(char));  l = *line;  }  *l = c;  }  *l = '';  }  *line = NULL; }  

Еще раз спасибо 🙂

Комментарии:

1. чтобы избежать путаницы, я добавил Maxline и Maxlines, чтобы различать их

2. в комплекте отсутствуют…

3. @SobhanMohammadpour Они у меня были, забыл добавить их выше, просто добавил их.

4. Ваш код может выполнять следующую последовательность действий: *line = malloc(sizeof(char)); l = *line; l ; *l = c; . Это присваивается *l , когда l точки выходят за пределы выделенного блока. Является ли проблема просто отсутствующей * MAXLINE в malloc ? /// Есть и другие проблемы. (l - *line) != MAXLINE это неправильно. Вы хотите сравнить текущее line значение с исходным line .

5. @ikegami На самом деле, l увеличивается после *l = c; . Пожалуйста, взгляните на скобки и спасибо вам за вашу помощь. Ошибка происходит с malloc. (l - *line) != MAXLINE это просто вычисление общего расстояния. *линия указывает на начальную позицию, в то время как l будет указывать на новую позицию после увеличения