加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何动态计算动态分配的内存的大小

发布时间:2020-12-16 09:58:45 所属栏目:百科 来源:网络整理
导读:考虑如下代码: int i,a_size,s_size,n;char **a;a_size = 100; // exampless_size = 10;a = malloc(a_size * sizeof(char*));for (int i = 0; i a_size; i++) a[i] = malloc((s_size) * sizeof(char)); 现在,我想动态计算数组中有多少元素(因此,忽略a_size)
考虑如下代码:

int i,a_size,s_size,n;
char **a;

a_size = 100; // examples
s_size = 10;

a = malloc(a_size * sizeof(char*));
for (int i = 0; i < a_size; i++)
    a[i] = malloc((s_size) * sizeof(char));

现在,我想动态计算数组中有多少元素(因此,忽略a_size).这是正确的方法吗?

解决方法

一般情况下你不能,你应该自己处理这种簿记,但一种可能性是将额外的行指针设置为NULL(也就是一个哨兵):

a = malloc((a_size + 1) * sizeof(char*));   // allocate additional row pointer
for (int i = 0; i < a_size; i++)            // allocate rows
    a[i] = malloc(s_size); 
a[a_size] = NULL;                           // set sentinel row to NULL

然后,您可以通过遍历行指针来确定大小,直到找到NULL行.请注意,如果您经常这样做,或者行数可能很大,这可能效率很低.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读