了解 NSS PK11_CipherOp 和 C 内存分配
-
12-09-2019 - |
解决方案
您的问题似乎是malloc
缺少声明 - 您还没有<stdlib.h>
这意味着,编译器是假设该函数返回int
,其然后被显式转换为(unsigned char *)
。如果是在一个平台上,其中sizeof(int) != sizeof(void *)
,像x86-64的,那么这将裂伤指针值。
这示出了完全为什么在C(与C ++),你应该的不强>投malloc()
的结果 - 这样做是不必要的,并从你隐藏此确切错误。这也说明了为什么你应该打开编译器警告。
解决方法是#include <stdlib.h>
,虽然你在那里从malloc()
除去演员。
<强>附录:强>
您另一个问题是,你传递给sizeof(outbuf)
PK11_CipherOp()
。这将是正确的(等于out_buf_size
)时outbuf
是一个数组,但不正确(的大小指针本身)时outbuf
是一个指针。
替换sizeof(outbuf)
每个out_buf_size
,你应该是好去(还有另外一个后太)...
其他提示
实测值的问题。原来,我是用sizeof(outbuf)
作为参数之一。当outbuf中的堆栈上宣布,作为char outbuf[1024];
这将返回1024然而,当outbuf中在堆上,作为char * outbuf = malloc(1024);
的outbuf的大小刚好4.此参数告诉功能多少空间是如何在现有的outbuf,所以功能以为它只有4个字节的空间。它需要16做的任何的所以它只是不执行任何工作返回。
不隶属于 StackOverflow