用zlib实现简单的android二进制崩溃
我用CMake制作了一个简单的android可执行文件,它与ndk上的本机zlib链接。一切编译都正确,但调用用zlib实现简单的android二进制崩溃,android,c++,cmake,android-ndk,zlib,Android,C++,Cmake,Android Ndk,Zlib,我用CMake制作了一个简单的android可执行文件,它与ndk上的本机zlib链接。一切编译都正确,但调用deflateInit时,我遇到了一个分段错误 代码如下: main.cpp #包括 #包括 int main() { z_溪strm; deflateInit(&strm,Z_DEFAULT_COMPRESSION); std::cout事实证明,将z_stream设置为零可以解决问题 #包括 #包括 #包括 int main() { z_溪strm; std::memset(&str
deflateInit
时,我遇到了一个分段错误
代码如下:
main.cpp
#包括
#包括
int main()
{
z_溪strm;
deflateInit(&strm,Z_DEFAULT_COMPRESSION);
std::cout事实证明,将z_stream
设置为零可以解决问题
#包括
#包括
#包括
int main()
{
z_溪strm;
std::memset(&strm,0,sizeof(z_流));
deflateInit(&strm,Z_DEFAULT_COMPRESSION);
std::cout真正的问题是deflate函数在输入时读取流的内部。显然,您为函数提供了一个带有随机垃圾的结构。将结构设置为所有零将初始化函数读取的成员,使其成为正确的值。状态是z_stream
中的字段将在调用时初始化ingdeflateInit
。通常,当任何API需要指向结构的指针时,请务必仔细阅读文档,了解函数是否将读取结构的各个成员以执行内部管理。
cd build
adb push main /data/local/tmp/.
adb shell
shell@device:/ $ cd /data/local/tmp
shell@device:/ $ ./main
[1] + Stopped (signal) ./main