- 论坛徽章:
- 0
|
试图测试malloc不可重入性的代码如下:
- main.c
- /*这是主程序,用来调用malloc*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <string.h>
- #include <sys/types.h>
- #include <unistd.h>
- void setUnblock()
- {
- sigset_t sigset;
- sigemptyset(&sigset);
- sigprocmask(SIG_SETMASK, &sigset, NULL);
-
- }
- void usr1Handler (int signal_number) /*处理SIGUSR1信号*/
- {
- setUnblock(); /*使得SIGUSR1可以被嵌套*/
- free((int*)malloc(sizeof(int)*1000));
- //printf("enter handler\n");
- //getchar();
- }
- int main ()
- {
- int *pi;
- struct sigaction sa;
-
- memset(&sa, 0, sizeof(sa));
- sa.sa_handler = &usr1Handler;
- sigaction(SIGUSR1, &sa, NULL);
- pause();
-
- return 0;
- }
复制代码
- kill.c
- /*这个是用来发送SIGUSR1信号的*/
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- int main(int argc,char *argv[])
- {
- int i;
- char killstr[30]="kill -USR1 ";
- if (argc == 2)
- {
- strcat(killstr, argv[1]);
- }
- for (i=0; i<3; i++)
- {
- fork(); /*这样会有8个进程同时发送*/
- }
-
- while(1)
- {
- system(killstr);
- }
-
- return 0;
- }
复制代码
验证方法是:
1. 编译main.c 和kill.c
gcc main.c -o main
gcc kill.c -o kill
2. 运行./main
并在另外一个终端运行ps -A|grep main查找出该进程的进程号为pid
3. 运行./kill pid (此处pid为第二步查到的pid)
运行了很长时间,也没有crash
请大家看看我的程序,讨论一个测试方案出来
原帖由 ypxing 于 2007-8-8 23:05 发表 ![]()
这两天写了一个测试程序来验证malloc的不可重入性
但是malloc一直没有crash,有点郁闷
过段时间把自己的测试代码贴出来,让大家来帮忙看看 |
|