calloced我有一個在程式啟動后獲取的矩陣。然后我需要弄清楚何時需要重新分配它(在陣列已滿之后)。我最初的想法是在結構中保存一個計數器變數并在每次插入后遞增它,但我認為有更好的方法來使用sizeof()?我正在使用calloc,所以我不需要使用malloc和memset結合,這意味著獲取的索引calloced將設定為 0?所以我需要檢查陣列中有多少“非零”元素才能知道我什么時候需要realloc。我寫了一個簡單的測驗程式,但我對底部感到困惑printf輸出“1”的陳述句。將元素放入此陣列后,它們不會以任何方式修改,這就是為什么 counter 方法對我來說似乎很好,但我想測驗它是否有效。
#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]));
}
這不應該輸出一個,而是輸出矩陣的大小,因為 sizeof(a.arr[0]) 將為您提供 char 型別的大小,然后將其劃分為以位元組為單位的陣列大小。
uj5u.com熱心網友回復:
sizeof用于報告物件的大小。
*alloc()回傳一個指向已分配記憶體的指標。 sizeof不能用于識別從回傳的指標分配的數量。跟蹤使用輔助資料分配的記憶體。
可能
struct c {
unsigned char **arr;
size_t rows, columns;
}
uj5u.com熱心網友回復:
該sizeof(array)/sizeof(array[0])機制僅適用于原始宣告范圍內的固定大小陣列。它不能用于確定動態分配的陣列的大小,也不能用于作為指向函式的單個指標傳遞的陣列、存盤的等 - 即陣列已衰減為指標的位置
您必須自己將尺寸存盤在某個地方
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/431187.html
下一篇:如何從C中的陣列中洗掉一個元素?
