gpt4 book ai didi

创建一个只有 NULL 值的 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:17 25 4
gpt4 key购买 nike

output_s = (char**)malloc(sizeof(char*));
output_s[0] = (char*)malloc(sizeof(char));
output_s[0] = NULL;

所以我要创建的是一个 char 数组,它通常是 char* 字符串的 char 数组,但是对于这个特定的输入案例,我想创建一个只包含 NULL 条目的数组,并且出于某种原因当我创建条目时,我可以释放我的数组,但无法释放设置为 null 且 1 个字节已泄漏的条目。

  free(result[0]);
free(result);

稍后会调用它来释放内存,结果是上面返回的 output_s 变量

==18402== HEAP SUMMARY:
==18402== in use at exit: 1 bytes in 1 blocks
==18402== total heap usage: 3 allocs, 2 frees, 1,033 bytes allocated
==18402==
==18402== 1 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18402== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck- amd64-linux.so)
==18402== by 0x4007D1: camel_caser (camelCaser.c:33)
==18402== by 0x400CE4: test_camelCaser (camelCaser_tests.c:30)
==18402== by 0x400D47: main (camelCaser_main.c:13)
==18402==
==18402== LEAK SUMMARY:
==18402== definitely lost: 1 bytes in 1 blocks
==18402== indirectly lost: 0 bytes in 0 blocks
==18402== possibly lost: 0 bytes in 0 blocks
==18402== still reachable: 0 bytes in 0 blocks
==18402== suppressed: 0 bytes in 0 blocks

camelCaser.c:33 是 mallocs 的行

output_s[0] = (char*)malloc(sizeof(char));

最佳答案

output_s[0] = (char*)malloc(sizeof(char));

这会分配内存并将指向它的指针存储在 output_s[0] 中。

output_s[0] = NULL;

这会用 NULL 覆盖前一个指针,从而泄漏前一个指针指向的内存,让 valgrind 报告它。

如果您希望新字符串为空(又名“空字符串”),则:

output_s[0] = malloc(sizeof(char));
output_s[0][0] = '\0';

但是新字符串只有一个字符的空间,这表明这不是您想要的。如果你想为 N 个字符的字符串分配内存,那么分配它:

output_s[0] = malloc(sizeof(char) * N);
output_s[0][0] = '\0';

由于 sizeof(char) 始终为 1,您可以改为这样做:

output_s[0] = malloc(N);
output_s[0][0] = '\0';

请注意,这仅在分配 char 数组时适用。要分配其他类型的数组,您仍然需要 sizeof(type) * N

如果您希望整个 char** 数组以 NULL 结尾,则只需将最后一个元素设置为 NULL。您不需要额外分配任何东西,因为所有 char* 元素的内存都已经分配好了:

output_s[index] = NULL;

但是,如果该特定元素包含分配的字符串,您需要先释放它:

free(output_s[index]);
output_s[index] = NULL;

作为旁注,我建议改掉转换 malloc() 返回值的坏习惯。它不是必需的,它可以在某些情况下隐藏错误。含义,使用:

output_s[0] = malloc(N);

代替:

output_s[0] = (char*)malloc(N);

关于创建一个只有 NULL 值的 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48484539/

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