1

我正在使用 sigalstack 结构,详细信息位于:

在这里(MAC OSX)

这里(Linux)

我只是这样声明

struct sigaltstack aa;

我不断收到以下错误

error: storage size of ‘aa’ isn’t known

我阅读并检查了“名称”的存储大小未知,但我只是声明它,所以它并不真正适用。

4

2 回答 2

1

您不能像那样只使用未初始化的备用堆栈。您必须在其字段中为堆栈分配空间并在其ss_sp字段中设置相应的大小ss_size

您链接的 man7 链接对此有更多信息。实际上,它在页面底部提供了一个示例:

stack_t ss;

ss.ss_sp = malloc(SIGSTKSZ);
if (ss.ss_sp == NULL)
    /* Handle error */;
ss.ss_size = SIGSTKSZ;
ss.ss_flags = 0;
if (sigaltstack(&ss, NULL) == -1)
    /* Handle error */;

希望有帮助。

于 2013-04-09T04:02:24.453 回答
1

您链接到的Mac OS页面显示(在“旧版概要”部分中):

兼容性

使用(过时的)sigaltstack结构将导致编译器诊断。使用stack_t,在 中定义<signal.h>

这表明您不应尝试使用struct sigaltstack. 该页面还显示了您应该如何在 Mac OS 上执行此操作。Linux 页面还显示了您应该如何使用该stack_t类型,并且根本没有提及struct sigaltstack

于 2013-04-09T04:07:21.973 回答