代码之家  ›  专栏  ›  技术社区  ›  Hamy

理解NSS PK11_CipherOp和C内存分配

  •  0
  • Hamy  · 技术社区  · 16 年前

    与C有一些问题。我有这是我的代码:

    // First line works, second line does not! 
    char outbuf[1024];
    // char *outbuf = (char *) malloc(1024);  // char is always 1
    

    我将这个突发传递给一个名为 PK11_CipherOp() here ,您可以看到它期望 char *

    我不明白为什么第一条线工作可靠,而第二条线不可靠!

    File Source

    谢谢

    汉密尔顿

    2 回复  |  直到 16 年前
        1
  •  3
  •   caf    16 年前

    您的问题似乎是缺少对的声明 malloc <stdlib.h> .

    这意味着您的编译器假设函数返回 int (unsigned char *) . 如果你在一个平台上 sizeof(int) != sizeof(void *)

    这完美地说明了为什么在C中(与C++不同)应该 malloc() -这样做是不必要的,并且对您隐藏了这个确切的bug。它还说明了为什么应该打开编译器警告。

    解决办法是 #include <stdlib.h> ,并从中移除铸件 malloc()

    增编:

    sizeof(outbuf) PK11_CipherOp() out_buf_size )什么时候 outbuf 指针本身 )什么时候

    更换每个 sizeof(突发事件) 大小不一

        2
  •  0
  •   Hamy    16 年前

    发现了问题。原来我用的是 sizeof(outbuf) 作为参数之一。当在堆栈上声明EXBUFF时,如 char outbuf[1024]; char * outbuf = malloc(1024); extuf的大小只有4。这个参数告诉函数extuf中有多少可用空间,因此函数认为它只有4字节的空间。这需要16分钟 任何东西