我正在学习C,并且正在使用库进行测试 - 确切地说是openssl库。我的SHA功能成功运行了。然后,当我将main方法之外的工作代码(在下面发布)移动到我调用的方法(字面上是相同的代码)时,它在我尝试执行时创建了分段错误。
const char *input = "hashthisstring"; unsigned char *result;
SHA1((const unsigned char *)input, strlen(input), result);
int i; for (i = 0; i<SHA_DIGEST_LENGTH; i++) printf("%02x",
result[i]); printf("\n");
当我们尝试访问无法访问的内存位置时,我认为我理解了分段错误错误。但我在这里很困惑 - 代码完全相同!有什么帮助吗?
答案 0 :(得分:0)
我猜测问题是result
应该存储输出,但它只是一个未初始化的指针。
SHA1()计算d处n个字节的SHA-1消息摘要,并将其放在md(,其中必须有SHA_DIGEST_LENGTH = = 20字节输出的空间)。如果md为NULL,则将摘要放在静态数组中。
所以你想要做这样的事情:
unsigned char *result = malloc(SHA_DIGEST_LENGTH);
// make sure to free(result) eventually
如果您希望这样做更简单并且不需要返回结果,那么只需在堆栈中执行。
unsigned char result[SHA_DIGEST_LENGTH];
之前很有可能因为result
正好指向允许您的程序访问的内存位置。