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
指向什么?