C 分段故障问题:
我一直在寻找这个问题的位置,但似乎找不到它/一定忽略了什么。任何帮助都将不胜感激C 分段故障问题:,c,segmentation-fault,C,Segmentation Fault,我一直在寻找这个问题的位置,但似乎找不到它/一定忽略了什么。任何帮助都将不胜感激 #define MAX_LETTERS 26 char alphabet[MAX_LETTERS]; void initialize_alphabet(char *a) { char *p; char current_letter = 'a'; for (p=a;p<(a+MAX_LETTERS);p++) { *p = current_letter++; } } void re
#define MAX_LETTERS 26
char alphabet[MAX_LETTERS];
void initialize_alphabet(char *a) {
char *p;
char current_letter = 'a';
for (p=a;p<(a+MAX_LETTERS);p++) {
*p = current_letter++;
}
}
void reverse_print_alpha(char *b) {
static var = 0;
char *p;
var?(p=NULL):(p=b);
var ^= 1;
initialize_alphabet(p);
for (p=(b+MAX_LETTERS-1);p>=b;p--) {
printf("%c",*p);
}
printf("\n");
}
int main(void) {
int i = 0;
while (i++<10) {
reverse_print_alpha(alphabet);
}
}
#定义最多26个字母
字符字母表[最大字母];
无效初始化字母表(字符*a){
char*p;
字符当前字母='a';
对于(p=a;p=b;p--){
printf(“%c”,*p);
}
printf(“\n”);
}
内部主(空){
int i=0;
而(i++我发现您至少有两个问题
1) 您从未在主函数中将int i
初始化为0
。如果您使用for循环而不是在那里使用一段时间,则该循环将更加明确。在这种情况下,您将自己捕获错误
2) 在initialize_alphabet()
函数中,每次迭代都会增加p
和*p
。也就是说,首先它会运行:
*p=current_character++;
它增加字符p
指向和current_character
。其次,它正在运行:
p++
移动指针的操作通过了它之前指向的内存
我不明白你在这些函数中做了什么,因为应该是整数的变量是字符,反之亦然。我认为你可以从这些函数中走出一步,准确地手工编写你认为你的代码在每个循环中所做的事情,并将其与实际的变量c进行比较通过使用调试器或大量打印语句来挂起每个循环。一旦你找到这两个循环的分歧点,你就可以自己解决所有问题。啊,我看到有人在C291测验8上卡住了
这不起作用的部分原因是因为i,但主要是因为您没有为alphabet和p分配内存。默认情况下,它们都指向0x0,这是专用于操作系统的。由于mem地址无效,您需要分配不同的内存地址
编辑:将字母表的声明移到主函数中。是否运行了调试器并缩小了问题的范围?您需要进行一些调试。此网站不是调试服务。它是一个获取有关代码的更具体问题的答案的地方。但要显示所有代码并提问,“我的问题在哪里?"这不是一个好问题。注意:只需快速浏览一下,在main
中,您在使用它之前甚至没有初始化i
。我怀疑您还有其他类似的疏忽。请仔细阅读您的代码。很抱歉,我忘了发布我对调试器的使用。它显示分段错误发生在:*p=current_letter++;initialize i variable.var?(p=NULL):(p=b);
会比p=var?NULL:b;
好得多,也更惯用。但是,当p
为NULL
时……好吧,你自己追踪一下代码;我不知道你在这种情况下想要实现什么。你认为初始化字母表(p)怎么样
如果p
为空,将执行该操作吗?在这种情况下,当执行*p=current_letter++
时,p
指向什么?