c - 为什么这些代码给我一个 sigsegv 错误?

标签 c runtime-error

为什么这些代码给我一个运行时 SIGSEGV 错误。我尝试运行代码并在代码块中完美运行,但某些 IDE 给了我这些错误。

它采用斐波那契数列,然后对数列中的每个数字取模,并且只取前几个位置的数字,直到获得单个数字。

例如:输入1 9 {0 1 1 2 3 5 8 13 21}->{0 1 1 2 3 5 8 3 1}->{1 2 5 3}->{2 3}->3

#include <stdio.h>

int main(void) {
    // your code goes here
    int n,j,k,r,o;
    o=0;


//  printf("enter the number of test cases: ");
    scanf("%d",&n);
    int s[n];
    int a;
    a=n;

    while(n!=0)
    {


         r=k;
         int e[k/2];
         int m;
         scanf("%d",&k);//enter say 9
      if(k!=1)
            {
              int i[k];
              i[0]=0;
              i[1]=1;

              for(j=0;j<k;j++)
                  {
                     if(j>1)
                       {
                         i[j]=(i[j-2]+i[j-1])%10;
                       }


                  }


              while(r!=1)
                {
                 m=0;

                 for(j=0;j<r;j++)
                    {

                      if(j!=0)
                       {

                        if(j%2!=0)
                         {
                           e[m]=i[j];
                           m++;
                         }
                       }
                    }

                 for(j=0;j<k/2;j++)
                    {
                      i[j]=e[j];
                    }
                 r=r/2;
                }
             s[o]=e[0];
             o++;
             n--;
           }
        else
           {
             return 0;
           }


    }
    if(k!=1)
      {
        for(j=0;j<a;j++)
         {
             printf("%d\n",s[j]);
         }
      }


    return 0;
}

我想知道代码中的哪一点触发了错误,我对这些错误知之甚少(例如访问超出键的数组),你能解释一下吗?

最佳答案

当您第一次访问它时,您的 k 变量尚未初始化

r=k;
int e[k/2];

这意味着它等于之前存储在该内存位置的任何内容。这可以是任何随机数,而且非常糟糕。

在下一行中,您声明一个大小为 k/2 的数组 e[k/2],但由于 k 从未初始化,这可以是任何大小。如果 k 恰好为负数,我会在该行收到段错误。

要解决此问题,您需要在使用所有变量之前对其进行初始化。

如果您尝试访问操作系统未分配给程序的内存,则会发生段错误 (SIGSEGV)。

为了帮助调试这些错误,请在调试器中运行代码。然后,这可以将您直接带到发生段错误的行。

关于c - 为什么这些代码给我一个 sigsegv 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830549/

相关文章:

c++ - 在 Windows 上使用 C/C++ 检查 VPN 的连接性

c++ - 使用 `\` 符号的 cpp 中的 #define 语法不清楚

excel - 我正在尝试更改多个工作簿的事件过程?

error-handling - 如何隔离网页中的各个部分,以使一个部分不会影响其他部分

c - 使用修改的快速排序从数组中选择 k 个最小元素时出现运行时错误

编译器错误 C2059 : syntax error 'type'

c++ - 在 Release模式下,代码行为不如预期

c - 当动态内存分配显式转换为结构类型时,到底会发生什么?

C 内存分配错误

C++ 错误 : terminate called after throwing an instance of 'std::bad_alloc'