Что мне делать с ошибкой "ошибка сегментации (ядро выгружено)"?(Больше нигде не нашел ответа)

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

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

int main(int argc, char *argv[])
{
  char *entry1 = argv[1], *adress[100], *possibleAdress[100], c;
  int i,j,k,possible = 0;

  while(c = getchar()!=EOF)          //write addresses to array
  {
    while(c = getchar()!=13)
      {
        adress[i][j] = c;
        j++;
      }
      i++;
  }

  i = 0;

  while(adress[i]!=0)        //find adresses matching with search enrty
  {
    j = 0;
    while(adress[i][j]!=0)
    {
      while(entry1[j]==adress[i][j])
        j++;
      if(j==strlen(entry1))        //check if the whole search entry is matching
      {
        possibleAdress[k] = adress[i];
        k++;
      }
      i++;
    }
  }
  return 0;
}

3 ответа

Одна вещь, которую я могу видеть неправильно, состоит в том, что вы не инициализировали значения i и j в main, прежде чем использовать их в циклах while.

Что мне делать с ошибкой "ошибка сегментации (ядро сброшено)"?

Предыдущий вопрос о том, что такое segfaults: что такое ошибка сегментации?

Что вы делаете с ними, так это отключаете отладчик, например, GDB. Затем вы сможете пошагово проходить код, инструкцию за инструкцией и понимать причину проблемы.

Другие ответы верны, я и не инициализированы. Отладка позволит вам проверить эти переменные и доступ к вашей памяти.

Вам нужно много исправлений. Чтобы увеличить указатель, вам нужно выделить для него достаточный объем памяти. Ваш цикл while совершенно неверен, когда вы пытаетесь увеличить значение указателя без выделения памяти в нем, и именно по этой причине он выдает ошибку ошибки sig.

сначала измените эту строку: int i=0,j=0,k=0,possible = 0;

теперь цикл

while(c = getchar()!=EOF)          //write addresses to array
{
  j = 0;
  char *p = malloc(30);// size should be change as per your requirement
  address[i] = p; //store the address of p here
  while(c = getchar()!=13)
  {
    *((adress[i])+j) = c; //it is just like *p++ = c
    j++;
  }
  i++;
 }
Другие вопросы по тегам