如何计算指针指向内存的大小?

Jee*_*tel 7 c memory-management

在我写的一个函数中:

char *ab; 

ab=malloc(10);
Run Code Online (Sandbox Code Playgroud)

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

unk*_*ulu 7

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

即代替

void f(char* x)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

使用

void f(char *x, size_t length)
{
    //....
}
Run Code Online (Sandbox Code Playgroud)

并在你的代码中

 char *ab = malloc( 10 );
 f( ab, 10 );
Run Code Online (Sandbox Code Playgroud)

  • 我建议函数原型是`void f(char*x,size_t length)`.`size_t` better表示传递的值的类型,也与`malloc`的参数类型匹配. (4认同)

Gil*_*ert 3

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

有点尴尬,但如果你想把一切都放在一起:

类型定义结构
{ // 数据大小后跟数据(C 独有的技巧!不适用于 C++)
    整数维度;// 数据元素的数量
    整数数据[1];// 可变数量的数据元素
malloc_int_t;

malloc_int_t *ab;

整数维度 = 10;
ab = malloc( sizeof(*ab) + (dimension-1)*sizeof(int) );
ab->尺寸 = 尺寸;

ab->data[n] // 数据访问

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