gpt4 book ai didi

c - 哪个指针值是 malloc 调用的最大值

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

关于 malloc 的相当简单的问题。我可以在分配区域内设置的最大值是多少。例如:

char *buffer;
buffer = malloc(20);
buffer[19] = 'a'; //Is this the highest spot I can set?
buffer[20] = 'a'; //Or is this the highest spot I can set?
free(buffer);

最佳答案

你的问题措辞有点不对。您的意思是“我可以用于分配的内存块的最大索引是多少”。答案与数组相同。

  • 如果您正在读取或写入内存,您可以安全地使用介于(包括)0 和比 block 大小小 1 之间的索引(在您的情况下,这意味着索引 19)。总而言之,这意味着您可以访问您要求的 20 个值。

  • 如果您只是获取指针以与同一 block 内的其他指针进行比较(并且您不打算读取或写入它),您还可以获取指针 one -过去的最后(在你的情况下,这意味着索引 20)。

用例子来阐明这些事情:

  1. 是的,buffer[19] = 'a'; 是您可以读取或写入容量访问的最后一个值。不要忘记,如果您想在此内存中存储一​​个字符串,并将其传递给需要以空字符结尾的字符串的函数,则此插槽是您最后一次放置 '\0' 值的机会>.

  2. 您可以通过以下方式访问buffer[20]:

    char *p;
    for( p = &buffer[0]; p != &buffer[20]; ++p )
    {
    putc( *p, stdout );
    }

    这很有用,因为我们倾向于迭代内存和存储大小的方式。如果我们不得不在所有地方都减去 1,这将大大降低我们的代码的可读性。

    哦,它给了你一个巧妙的技巧:

    size_t buf_size = 20;
    char *buffer = malloc(buf_size);
    char *start = buffer;
    char *end = buffer + buf_size;
    size_t oops_i_forgot_the_size = end - start;

关于c - 哪个指针值是 malloc 调用的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081865/

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