当我真正开始爱自己,
我才认识到,所有的痛苦和情感的折磨,
都只是提醒我:活着,不要违背自己的本心。
今天我明白了,这叫做“真实”。
重新思考内存申请
前言
最近在一个项目中用C语言做一个restful服务的桥接器,具体功能就是把Java端发过来的请求报文解析,再用解析出的内容调用C底层相应的接口,最后把C接口返回的信息再发给Java端。
测试时发现,多数接口的请求能正常接收到返回信息,但某些请求报文特别长的接口,就无法正常获取返回报文。查了代码发现是接收报文变量的长度定义过短导致程序提前退出了。我便把接收报文的变量变为了动态申请内存,申请了1MB的内存,结尾处再释放掉,这样改过之后,程序没有提前退出,却出现了段错误。查了半天,最后发现问题出在一个调试语句上,那里还是用的栈内存申请,在把最大报文长度限制变成1MB之后,加上调用底层C接口中申请的栈地址空间,超过了linux栈空间的限制,导致内存溢出了。