sigemptyset()覆盖下一个变量

时间:2012-01-20 12:03:13

标签: c signals

我有全局变量

int a[10];
struct sigaction act;
int b[10];

每当我打电话

sigemptyset(&act.sa_mask); 

数组a正在损坏。我怀疑它是否是编译器问题。我正在使用CodeSourcery mips-linux-gnu-gcc 4.5.2版。我用

编译
mips-linux-gnu-gcc -c -g -muclibc -pedantic -Wno-declaration-after-statement -std=gnu99 -G 0 -mips2 -msoft-float -mno-memcpy -fomit-frame-pointer -pipe -Wall -Wstrict-prototypes signal/signal.c

mips-linux-gnu-gcc -G 0 -msoft-float -static -o signal  signal.o

我的完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
int a[10];
struct sigaction act;
int b[10];


int main ();
int main ()
{
int i;
//initialize a and b
for(i = 0 ; i < 10;i++)
{
    a[i]=1;b[i]=1;
}

sigemptyset(&act.sa_mask);

//print
for(i = 0 ; i < 10;i++)
{
    printf("%d %d ",a[i],b[i]);
}

return 0;
}

我发现使用-muclibc选项进行编译会导致此问题。

2 个答案:

答案 0 :(得分:0)

您在数组后显示struct sigaction act ,但在代码中您提到的是siginfo变量,而不是act

可以在数组前siginfo声明吗?你能说明这个功能在做什么吗?

答案 1 :(得分:0)

我找到了答案 我没有链接-muclibc选项

mips-linux-gnu-gcc -G 0 -msoft-float -static -muclibc -o signal  signal.o

将解决问题

所以编译它时是使用uclibc的sigset.h并且在执行时是 从libc(signal.c sigemptyset())执行代码

如果你进一步挖掘_SIGSET_NWORDS mips是4,而对于x86则是32 所以sigemptyset()正在运行32次迭代而不是4次