簡體   English   中英

我的程序收到信號SIGSEGV,分段錯誤,請幫忙

[英]my Program received signal SIGSEGV, Segmentation fault, help please

當我嘗試運行此程序時,它不起作用。 當我去調試時,彈出一條消息“程序收到信號sigsegv,分段錯誤”

我用 gdb 調試程序,這是消息。 程序收到信號 SIGSEGV,分段錯誤。 0x0000555555555195 in ft_atoi (str=0x555555556004 "111") at ft_atoi.c:33 33 while (ft_isspace(str[i]))

#include <string.h>
#include <stdio.h>

static int ft_isspace(char c)
{
  if (c == '\n' || c == '\f' || c == ' ' ||
      c == '\r' || c == '\v' || c == '\t');
  return (1);
  return (0);
}
 
int ft_atoi(const char *str)
{
  int               i;
  int               n;
  int               signe;

  n = 0;
  i = 0;
  signe = 1;
  while (ft_isspace(str[i]))
    i++;
  if (str[i] == '-' || str[i] == '+')
    {
      if (str[i++] == '-')
    signe = -1;
    }
  while (str[i] >= '0' && (str[i] <= '9') && str[i] != '\0')
    {
      if (((unsigned long)n > 9223372036854775807 / 10) ||
      (((unsigned long)n == 9223372036854775807 / 10) &&
       ((unsigned long)n % 10) > 7))
    return ((signe > 0 ? -1 : 0));
      n = n * 10 + (*(str + (i++)) - '0');
    }
  return (n * signe);
}
int main()
{
  printf("%d", ft_atoi("111"));
  return 0;
}
static int ft_isspace(char c)
{
  if (c == '\n' || c == '\f' || c == ' ' ||
      c == '\r' || c == '\v' || c == '\t');
  return (1);
  return (0);
}

這將始終返回 1,導致循環結束。 注意這里的分號:

      c == '\r' || c == '\v' || c == '\t'); <-- HERE

想象一下,如果它看起來像這樣:

      c == '\r' || c == '\v' || c == '\t') j=2;

這將導致if語句決定是否執行j=2 無論if的結果如何,下一行的return都會執行。

那么你的代碼做同樣的事情,除了j=2 ,你有一個空語句。

語法是: if <expression> <statement>

您的表達式以最后一個右括號結束。 所以你的受控語句就是; .

只需刪除該分號,這樣return的語句就是由if控制的並且緊接在表達式之后的語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM