gpt4 book ai didi

linux - 如何通过使用信号处理程序为导致段错误的变量动态分配适当的内存?

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:35 27 4
gpt4 key购买 nike

有人问我一个问题,如何将内存分配给刚刚引起 SIGSEVG 信号的指针,我们可以使用信号处理程序来完成吗?

最佳答案

SIGSEGV 信号导致程序终止。但是,您所要求的可以完成,但我看不出有任何理由在发生内存冲突后继续执行程序。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <malloc.h>
int *p;
void sighandler(int);

int main()
{
signal(SIGSEGV, sighandler);
printf("\nProcess %d waits for someone to send it SIGSEGV\n",
getpid());

scanf("%d", p);
printf("%d", *p);
return 0;
}

void sighandler(int signum)
{
p = malloc(sizeof(int));
printf("\n\nProcess %d got signal %d\n\n", getpid(), signum);
signal(signum, SIG_DFL);
main();
}

但是,这仍然会导致 SIGSEGV,但会从第二次尝试开始打印输入的数字。

关于linux - 如何通过使用信号处理程序为导致段错误的变量动态分配适当的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42898809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com