在main()之外移动代码时出现分段错误

时间:2014-04-28 00:09:38

标签: c

我正在学习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");

当我们尝试访问无法访问的内存位置时,我认为我理解了分段错误错误。但我在这里很困惑 - 代码完全相同!有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我猜测问题是result应该存储输出,但它只是一个未初始化的指针。

根据the documentation

  

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正好指向允许您的程序访问的内存位置。