小编Deu*_*ral的帖子

收到SIGSEGV信号后的处理行为?

我们最近在UNIX中了解了OS类中的信号.我们使用C来访问unix API.

一个类伙伴在解除引用无效指针(到未分配的内存或空指针)然后处理生成的SIGSEGV信号时鬼混.他有一个代码块,它是这样的:

int* p;
int i = 0;
for (; i < 10; i++){
    printf("Iteration %d\n", i);
    p = i;
    int n = *p;
}
Run Code Online (Sandbox Code Playgroud)

然后他有一个简单的信号处理程序,只需打印信号编号.最终发生的事情是该程序将重复打印出它已收到一个数字为11的信号 - 一个SIGSEGV信号,并且不会退出循环.我们的教授发现这种行为很奇怪,并说他会调查一下.

从我在互联网上做的搜索来看,行为似乎并不奇怪,因为程序在SIGSEGV的情况下处理接收到的信号之后应该再次执行违规指令.但是,在任何官方UNIX或LINUX文档中,这种行为似乎都没有记录.您是否可以指出我关于此类行为的文档的一般方向?

编辑:

信号处理程序是这样的:

void signal_handler(int signo)
{
printf("%d\n", signo);
}
Run Code Online (Sandbox Code Playgroud)

将控制台输出重定向到生成的文件如下:

Iteration 0
11
11
11
11
11
... (only stopped if we sent it a SIGINT)
Run Code Online (Sandbox Code Playgroud)

c unix linux

5
推荐指数
1
解决办法
820
查看次数

我想找到2个3位数字的最大产品,它是一个回文,我的算法即使它应该也没有完成

我在C#中编写了以下代码.我已经从各个方面看了它,我认为它应该可以工作但是即使我让它在一夜之间运行也没有给出任何输出.有什么问题?提前致谢.

namespace Palymdrome
{
    class Multiple
    {
        private int x;
        private int y;

        public int ProductY
        {
            get
            {
                return y;
            }

            set
            {
                y = value;
            }


        }
        public int ProductX
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }
        public int Value
        {
            get
            {
                return x * y;
            }
        }

        public Multiple(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }


    class Program
    {
        static bool IsPalimdrome(int palimdrome)
        {
            string …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
1796
查看次数

标签 统计

c ×1

c# ×1

linux ×1

unix ×1