c语言 - 如何处理"segmentation fault(core dumped)"错误?(在其他任何地方都找不到答案)



当我运行下面的程序时,我遇到了这个问题。一切都编译得很好,但是当我运行它并输入一些东西时,我收到分段错误消息。它不是一个完整的代码,只是它的一部分,它应该将一些字符串(地址)从输入文件写入字符串数组,然后在数组中找到搜索字符串(输入作为参数)的可能匹配项。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
  char *entry1 = argv[1], *adress[100], *possibleAdress[100], c;
  int i,j,k,possible = 0;
  while(c = getchar()!=EOF)          //write addresses to array
  {
    while(c = getchar()!=13)
      {
        adress[i][j] = c;
        j++;
      }
      i++;
  }
  i = 0;
  while(adress[i]!=0)        //find adresses matching with search enrty
  {
    j = 0;
    while(adress[i][j]!=0)
    {
      while(entry1[j]==adress[i][j])
        j++;
      if(j==strlen(entry1))        //check if the whole search entry is matching
      {
        possibleAdress[k] = adress[i];
        k++;
      }
      i++;
    }
  }
  return 0;
}

我可以清楚地看到不正确的一件事是,在 while 循环中使用之前,您尚未初始化 main 中 i 和 j 的值。

如何处理"分段错误(核心转储)"错误?

关于什么是段错误,前面的一个问题:什么是分段错误?

你用它们做的是分解一个调试器,例如gdb。然后,您可以逐行、逐条指令地单步执行代码,并了解问题的原因。

其他答案是正确的,i&j是未初始化的。调试将允许您检查这些变量和内存访问。

你需要大量的更正。要递增指针,您需要为其分配足够的内存量。您的 while 循环是完全错误的,您尝试在不分配内存的情况下增加指针值,这就是它给您带来 sig 错误错误的原因。

首先更改此行: int i=0,j=0,k=0,possible = 0;

现在的 while 循环

while(c = getchar()!=EOF)          //write addresses to array
{
  j = 0;
  char *p = malloc(30);// size should be change as per your requirement
  address[i] = p; //store the address of p here
  while(c = getchar()!=13)
  {
    *((adress[i])+j) = c; //it is just like *p++ = c
    j++;
  }
  i++;
 }

最新更新