ошибка сегментации при выполнении кода C в Ubuntu

Когда я компилирую файл c, gcc не возвращает ошибок, но во время выполнения возникает ошибка сегментации. Отладчик показал, что ошибка возникает в этой части кода:

      int q=size[current];
      int *temp;
      temp = malloc ( sizeof(int)*q);
      for(i=0;i<size[current];i++)
        temp[i]=arr[current][i];

обр определяется:

      int arr[20][200];

текущий по умолчанию равен 0.

Я пытаюсь скопировать содержимое массива внутри 2d-массива (arr) во временный массив, я пробовал не использовать malloc, но все та же проблема.

PS: программа работает нормально на Windows.


person Marwan Tushyeh    schedule 30.12.2011    source источник
comment
Не могли бы вы показать, как вы инициализируете arr?   -  person Fred    schedule 30.12.2011
comment
Что такое arr? Можете ли вы дать нам что-нибудь, что компилирует и демонстрирует проблему?   -  person nmichaels    schedule 30.12.2011
comment
Не могли бы вы добавить определения текущего и обрр? Кроме того, я предлагаю вам скомпилировать все предупреждения, если вы еще этого не сделали, так как это может дать вам подсказку.   -  person gnometorule    schedule 30.12.2011
comment
я подозреваю, что ошибка в arr[current][i] ... убедитесь, что 1-е измерение arr имеет current или более элементов, а второе измерение arr имеет i или более элементов   -  person A4L    schedule 30.12.2011
comment
я определил arr следующим образом: int arr[20][200]; ток по умолчанию = 0   -  person Marwan Tushyeh    schedule 30.12.2011
comment
как вы заполняете size[current] ведь это верхняя граница i в вашем цикле?   -  person A4L    schedule 30.12.2011
comment
Где в вашем коде изменено current? Где установлен size[current]?   -  person nmichaels    schedule 30.12.2011
comment
Да, и что такое определение size[]?   -  person gnometorule    schedule 30.12.2011
comment
Научитесь компилировать с помощью gcc -g -Wall и использовать отладчик gdb.   -  person Basile Starynkevitch    schedule 30.12.2011
comment
Вы можете явно проверить (и/или зарегистрировать), содержит ли size[current] содержит ли значение <=200.   -  person alk    schedule 30.12.2011
comment
Вы добавили код для проверки возврата от malloc()? Вы должны, потому что, если он возвращает 0 из-за того, что не смог выделить память, вы получите ошибку seg при доступе к нулевому указателю.   -  person Jonathan Leffler    schedule 30.12.2011


Ответы (2)


Нет ничего плохого в коде, который вы показали (это я вижу).

Первый шаг, который вы должны сделать, это запустить вашу программу под Valgrind и исправить все ошибки, которые она сообщает.

Если Valgrind сообщает об ошибках, которые вы не понимаете, обновите свой вопрос выводом Valgrind.

Если Valgrind ничего не сообщает, запустите свою программу в GDB, напечатайте значения i, current, size[current] и т. д. и обновите свой вопрос с помощью сеанса GDB.

person Employed Russian    schedule 30.12.2011

Я подозреваю, что size[current] больше, чем 200.

person user1123450    schedule 30.12.2011