2014-04-28 48 views
0

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

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

根据the documentation

SHA1()计算在d的n个字节,并在MD地方它的SHA1消息摘要(其必须具有空间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刚刚发生在你的程序被允许访问的存储器位置是指向前的工作。

+0

谢谢,按照你的建议工作! – user3475774

相关问题