Почему эта программа для проверки, является ли строка палиндромом, возвращает сегфоут? - PullRequest
0 голосов
/ 10 декабря 2018

Я уже пробовал Valgrind с графическим интерфейсом Valkyrie и Code :: Blocks, но я действительно не знал, как создать проект для его запуска в отладчике, или он просто не работал.Строки printf("here") были только для проверки, где была ошибка, однако иногда она просто возвращала "here4".Он всегда возвращал ошибку сегментации: 11, и я не вижу ни одной строки, в которой я адресую память, которой я не владею.

#include <stdio.h>
#include <string.h>
int c, length=-1, n, m, palindrome, line[250];
int half[126];
int half2[126];
char string[250];
char charac[2];
int main(){
          while(c!=EOF){
                       c=getchar();
                       if(c=='\n' || c==EOF){ /*End of line*/
                                            /*Copies first half of line*/
                                            while(n<=length/2){
                                                              half[n]=line[n];
                                                              ++n;
                                                               }
                                            /*Copies second half of line*/
                                            for(n=0, m=length; n<=length/2; ++n, --m){
                                                                                     half2[n]=line[m]; 
                                                                                      }
                                            /*Tests if line is palindrome*/
                                            for(palindrome=1, n=0; palindrome && n<=length/2; ++n){
                                                                                                   if(half[n]!=half2[n])
                                                                                                             palindrome=0;
                                                                                                    }
                                            if(palindrome)
                                                printf("%s\nis a palindrome.\n", string);
                                            length=-1;
                                            n=0;
                                            m=0;
                                            string[0]=0;
                                            while(n<=125){
                                                         half[n]=0;
                                                         half2[n]=0;
                                                         ++n;
                                                          }
                                            n=0;
                                             }
                       else{
                           /*printf("here4");*/
                           ++length;
                           if(length>500)
                                    break; /*prevent overflow*/
                           line[length]=c;
                           sprintf(charac, "%c", c);
                           strcat(string, charac);
                            }
                        }
          return 0;
           }

1 Ответ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...