我有一个矩阵,在程序启动后得到calloced。然后,我需要确定何时需要实现它(在数组已满之后)。我最初的想法是在结构中保留一个反变量,并在每次插入后增加它,但是我认为使用sizeof()还有更好的方法吗?我使用的是calloc,所以不需要在构造中使用malloc和memset,这意味着获取calloced的索引将设置为0?因此,我需要检查数组中有多少“非零”元素,以便知道何时需要realloc。我编写了一个简单的测试程序,但我对输出'1‘的底部printf语句感到困惑。在将元素放入这个数组之后,它们将不会以任何方式被修改,这就是为什么计数器方法对我来说似乎很好,但我想测试它是否有效。
#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类型的大小,然后将其划分为数组的大小(以字节为单位)。
发布于 2022-02-21 22:42:31
sizeof用于报告对象的大小。
*alloc()返回一个指向分配内存的指针。不能使用sizeof来区分从返回的指针中分配的数量。使用辅助数据跟踪分配的内存。
也许吧
struct c {
unsigned char **arr;
size_t rows, columns;
}发布于 2022-02-21 21:28:48
sizeof(array)/sizeof(array[0])机制仅适用于其原始声明范围内的固定大小数组。它不能用于确定动态分配数组的大小,而不能用于传递为指向函数的单个指针的数组,例如,数组已衰减到指针的位置。
你得自己把尺码存起来
https://stackoverflow.com/questions/71212627
复制相似问题