为什么这个检查一行是否为回文的程序 return 会出现段错误?
Why does this program for checking if a line is a palindrome return a segfault?
我已经用 Valkyrie GUI 和 Code::Blocks 尝试过 Valgrind,但我真的不知道如何在调试器中为它创建一个项目 运行,或者它就是不起作用。 printf("here")
行只是为了检查错误是什么,然而,它有时会返回 "here4"。它总是返回 Segmentation fault: 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;
}
出于某种原因,每个人都使用评论而不是答案,所以如果没有人想添加自己的答案,我将在 5 分钟内接受这个答案,这样问题就关闭了。
我已经用 Valkyrie GUI 和 Code::Blocks 尝试过 Valgrind,但我真的不知道如何在调试器中为它创建一个项目 运行,或者它就是不起作用。 printf("here")
行只是为了检查错误是什么,然而,它有时会返回 "here4"。它总是返回 Segmentation fault: 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;
}
出于某种原因,每个人都使用评论而不是答案,所以如果没有人想添加自己的答案,我将在 5 分钟内接受这个答案,这样问题就关闭了。