【问题标题】:c, array and malloc difference. errorc、array和malloc的区别。错误
【发布时间】:2016-04-22 08:39:30
【问题描述】:

我是 AES 的开发人员。所以我下载并使用。 所以,这是我的问题。 如果我使用 [array] 是很好的工作。但是如果我使用 [malloc] 是错误的。我怎么了?

uint8_t key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c };
uint8_t iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
uint8_t *original = "aaaaaaaaaaaaaaaaa65aaaaaaaaaaaassssssssssssssssssssss65sssaaaaaa";
int len = 65;
uint8_t out[64] = {0,}; 

uint8_t ctext[200] = { 0, };
//uint8_t *ctext = (uint8_t*)malloc(sizeof(uint8_t) * len);

for (int i = 0; len > 0; i+=64) {
    len = len - 64;     
    AES128_CBC_encrypt_buffer(out, original + i, 64, key, iv);
    memcpy(ctext+i , out, 64);
}
uint8_t ptext[200] = { 0, };
len = 65;
for (int i = 0; len > 0; i += 64) {
    len = len - 64;  
    AES_CBC_dec(out, ctext + (i * sizeof(uint8_t)), key, iv, 64);
    memcpy(ptext + (i * sizeof(uint8_t)), out, 64);
}
return 0;

ctext[200]

它的作品。但。如果我会使用

*ctext

错误

我怎么了? 是 c 语言。

【问题讨论】:

  • 在使用artray时,你使用200,为什么只为len进行mallocing?
  • 第二次通过你的循环,你想memcpyctext + 64 的 64 字节并且你没有相应地分配。最好借助调试器或 Valgrind 等内存破解器来发现此类错误。

标签: c arrays malloc


【解决方案1】:

使用len = 65memcpylen = len - 64 的两倍,在第一次迭代后仍然是> 0
您的 memcpy 现在从 ctext + 64 开始,这将超出 sizeof(uint8_t) * len 的内存分配范围

您可以通过使用 len = 64 导致循环仅进行一次迭代或保持 len = 65 并将内存分配加倍 sizeof(uint8_t) * len * 2 来看到这一点

如果您使用malloc,请不要忘记之后释放内存

【讨论】:

    【解决方案2】:

    *ctext 是数组中的第一个 uint_8。改用 ctext (地址)。请务必分配足够的空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多