c/c++开发分享如何计算指针指向内存的大小?

在我写的一个函数中:

char *ab; ab=malloc(10); 

然后在另一个函数中我想知道ab指针指向的内存大小。 有什么方法我可以知道ab指向10个内存字符?

    这是一个秘密,只有free()才知道。 它可能在您的系统中,但以完全依赖于实现的方式。

    有点尴尬,但如果你想把所有东西放在一起:

      typedef结构  {//数据大小后跟数据(C只是技巧!不适用于C ++)      int维;  //数据元素的数量      int data [1];  //可变数量的数据元素  malloc_int_t;   malloc_int_t * ab;   int dimension = 10;  ab = malloc(sizeof(* ab)+(dimension-1)* sizeof(int));  ab-> dimension = dimension;   ab-> data [n] //数据访问 

    我已将数据类型更改为int,以使代码成为更通用的模板。

    不,你没有标准的方法来做到这一点。 你必须将指向内存的大小和指针一起传递,这是一个常见的解决方案。

    也就是说

     void f(char* x) { //... } 

    使用

     void f(char *x, size_t length) { //.... } 

    并在您的代码中

      char *ab = malloc( 10 ); f( ab, 10 ); 

    你不能(无论如何)。 你必须自己跟踪大小。

    malloc某些实现可以为您提供访问该信息的API,但标准中没有相关规定。

    没有办法,你必须将分配的内存大小存储在另一个变量中。

    不,不幸的是。

    您需要将块的大小与指针一起传递。

    没有。

    现在,正如所说,有非便携式黑客可以做到这一点,但依靠它们是不安全的。

    如果你100%确定知道内存是通过malloc()分配的,你可以将指针倒回几个字节并检查’malloc节点’,用于跟踪已经分配了哪些内存部分,哪些部分有不。 但是,我不能强调这一点 – 不要依赖于此。

    大小是您传递给malloc的大小,您可以使用全局变量或宏来记住它。

    无法从指针本身推断出已分配内存的大小。 由于abchar *sizeof(ab)sizeof(char *) ,这显然与分配的内存块的大小不同。

    由于您使用所需大小调用malloc ,因此您知道大小是多少。 将此数字与指向需要知道大小的函数的指针一起传递。

    我有一个结构和一个指向其内存地址的字符指针。 所以将它与你的问题联系起来,我想找到它所指向的内存位置的大小,即结构的大小。 所以你在逻辑上做的是找到指针创建的对象的大小。 这对我有用:

      unsigned char * buffer= Library1Structure; int x=sizeof(Library1Structure); 

    所以x的值告诉我指针缓冲区指向的内存位置的大小。

      以上就是c/c++开发分享如何计算指针指向内存的大小?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545828.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注