首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取矩阵中的当前元素数,以决定何时将其变现。

问获取矩阵中的当前元素数,以决定何时将其变现。
EN

Stack Overflow用户
提问于 2022-02-21 20:28:08
回答 2查看 48关注 0票数 0

我有一个矩阵,在程序启动后得到calloced。然后,我需要确定何时需要实现它(在数组已满之后)。我最初的想法是在结构中保留一个反变量,并在每次插入后增加它,但是我认为使用sizeof()还有更好的方法吗?我使用的是calloc,所以不需要在构造中使用malloc和memset,这意味着获取calloced的索引将设置为0?因此,我需要检查数组中有多少“非零”元素,以便知道何时需要realloc。我编写了一个简单的测试程序,但我对输出'1‘的底部printf语句感到困惑。在将元素放入这个数组之后,它们将不会以任何方式被修改,这就是为什么计数器方法对我来说似乎很好,但我想测试它是否有效。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

struct c {

    char** arr;
};

int main() {

    struct c a;

    a.arr = calloc(40, sizeof(char*));
    
    for (int x = 0; x < 40; ++x) {

        a.arr[x] = calloc(20, sizeof(char));

        a.arr[x] = "lol\0";
    }

    a.arr[30] = "dfsd\0";

    printf("%s\n", a.arr[30]);

    printf("reallocing...\n");

    a.arr = realloc(a.arr, 200 * sizeof(char*));


    if (a.arr == NULL) {

        printf("failed\n");
    }

    for (int x = 40; x < 200; ++x) {

        a.arr[x] = calloc(20, sizeof(char));

        a.arr[x] = "lol\0";
    }


    for (int x = 0; x < 200; ++x) {

        printf("%s\n", a.arr[x]);

    }

    printf("total size: %i\n", sizeof(a.arr) / sizeof(a.arr[0]));
}

这不应该输出一个,而应该输出矩阵的大小,因为a.arr将给出char类型的大小,然后将其划分为数组的大小(以字节为单位)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-21 22:42:31

sizeof用于报告对象的大小。

*alloc()返回一个指向分配内存的指针。不能使用sizeof来区分从返回的指针中分配的数量。使用辅助数据跟踪分配的内存。

也许吧

代码语言:javascript
复制
struct c {
  unsigned char **arr;
  size_t rows, columns;
}
票数 0
EN

Stack Overflow用户

发布于 2022-02-21 21:28:48

sizeof(array)/sizeof(array[0])机制仅适用于其原始声明范围内的固定大小数组。它不能用于确定动态分配数组的大小,而不能用于传递为指向函数的单个指针的数组,例如,数组已衰减到指针的位置。

你得自己把尺码存起来

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71212627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档