gpt4 book ai didi

c - 为 SHA1 摘要数组分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:12 24 4
gpt4 key购买 nike

我有一个小程序可以为通过命令行传递的参数生成 SHA1 摘要并将它们存储在指向 char 数组的指针数组中(我认为):

#include <stdio.h>
#include <openssl/sha.h>

int entries = 0; // Keep track of entries added

int main(int argc, char **argv)
{
// Allocate space for the digest array
unsigned char **mds = malloc(1);

// Add entries to the digest, one for each argument passed
for(int k = 1; k < argc; k++) {
mds[k - 1] = malloc(SHA_DIGEST_LENGTH);
SHA1(argv[k], strlen(argv[k]), mds[k - 1]);
entries++;
}

// Print each 20-byte digest
for(int j = 0; j < entries; j++) {
for(int i = 0; i < SHA_DIGEST_LENGTH; i++) { printf("%02x ", *(mds[j] + i)); }
printf("\n");
}
}

最初我有 unsigned char **mds = calloc(argc, SHA_DIGEST_LENGTH); 每次我想添加另一个时我都会尝试使用 realloc()条目(如果我不知道我以后会有多少条目)。

但是后来我发现我不需要那么做,我什至根本不需要分配任何空间?只是一个字节,它仍然可以正常工作。这对我来说似乎不对。

我是走运了还是怎么了?我错过了什么?

最佳答案

Am I just lucking out or something?

是的。

What am I missing?

您的程序在分配的内存之外写入。这样做会导致未定义的行为。任何事情都可能发生,包括正确行为的出现。

添加一些 free() 调用可能会导致一些崩溃,但不能保证 - 毕竟未定义的行为是未定义的。

关于c - 为 SHA1 摘要数组分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com