【问题标题】:Get the length of dynamically allocated array in C [duplicate]获取C中动态分配数组的长度[重复]
【发布时间】:2011-07-04 19:46:48
【问题描述】:

可能重复:
length of array in function argument

如何在 C 中获取动态分配数组的长度?

我试过了:

sizeof(ptr)
sizeof(ptr + 100)

他们没有工作。

【问题讨论】:

标签: c


【解决方案1】:

你不能。您必须将长度作为参数传递给您的函数。指针的大小是包含地址的变量的大小,这就是您找到 4(32 位地址空间)的原因。

【讨论】:

    【解决方案2】:

    由于 malloc 只是返回一块内存,因此您可以在块中添加额外的信息来告知数组中有多少元素,如果您无法添加说明数组大小的参数,这是一种解决方法

    例如

    char* ptr = malloc( sizeof(double) * 10 + sizeof(char) );
    *ptr++ = 10;
    return (double*)ptr;
    

    假设你可以在 PHP 中读取数组之前,我不熟悉的语言。

    【讨论】:

    • 您只会在分配中添加一个字节来存储长度?如果分配是 1000 而不是 10 怎么办?
    【解决方案3】:

    这里你看到了 C 的危险:一个 ptr 只是指向内存并且无法知道假定的大小是多少。您可以不断增加,操作系统最终可能会抱怨,或者您的程序崩溃,或损坏其他程序。您应该始终指定大小,并自己检查边界!

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 我认为这是Go slices 中使用的方法。我觉得没问题。
      猜你喜欢
      • 1970-01-01
      • 2011-11-21
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多