Linux 上 C 的程序遇到个异常退出问题,局部变量大小有限制??

63 天前
 SS945
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/prctl.h>
#include <string.h>
#include <pthread.h>
#include <liblx_api/lx_api.h>


static void *client_check(void *arg)
{
printf("###### %s %d ######\n", __FUNCTION__, __LINE__);
#define SZ_BUF 32768 /* 32*1024 */
char post_data[SZ_BUF] = {0};
char enc_msg[SZ_BUF + 16] = {0};
unsigned char cipher_data[SZ_BUF] = {0};
unsigned char cipher_str[SZ_BUF] = {0};
unsigned char test[SZ_BUF] = {0};
strcpy((char *)cipher_data, "AAAAAAAAAAAAAAAAA");
strcpy((char *)cipher_str, "CCCCCCCCCCCCCCC");
strcpy((char *)enc_msg, "DDDDDDDDDDDDDDDD");
strcpy((char *)post_data, "EEEEEEEEEEEEEEE");
strcpy((char *)test, "FFFFFFFFFFFFFFFFF");
printf("###### %s %d ######\n", __FUNCTION__, __LINE__);

return 0;
}


int main(void)
{
pthread_t tidp;
printf("\n######## start #####\n");
test_service(); //工作正常
if (pthread_create(&tidp, NULL, client_check, NULL) != 0) //异常退出
{
LX_NGX_ERR("pthread_create error!\n");
}

printf("AAAAAAA hello world!!!\n");
return 0;
}


上面的程序如果正常在 main 里面跑就是好的,但一放到 pthread_create 里面用线程跑就不行,放在 x86 上就可以,但放在我的板子里板就不行,这是什么鬼????
1245 次点击
所在节点    C
7 条回复
rickc137
63 天前
可能超线程资源限制了吧,用 gdb 能调试吗
SS945
63 天前
@rickc137 目标板上没有 gdb ,头痛。
sagaxu
63 天前
获取一下线程栈的大小看看有没有差别
xiaozhaoz
63 天前
pthread_init_attr()
pthread_attr_getstack()
看默认栈大小。

不同的 libc 实现,线程栈大小不同,glibc 默认 2M 。
ulimit -s 也会限制栈大小。

可以统一通过 pthread_create 第二个参数设置栈大小。
SS945
63 天前
@xiaozhaoz 确实。。。这板子只有 128K 。。。谢谢
sujin190
63 天前
都这么大内存了不堆上分配很容易遇到不可预测问题吧
proxytoworld
63 天前
32m 为什么不堆分配

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1062935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX