在C中,我在内存中为x个y结构分配空间(参见下面的代码)并返回这个内存区域,以便与另一个.c源文件及其函数一起使用。
一旦我将分配的内存传递给另一个函数,内存的实际内容可以正确访问,但是当我想返回传递给函数的结构数量时,它总是返回4.
在下面的代码中,我显示结构的数量是37,但是数组的大小返回为4.
“数组”正确地按预期填充了所有37个元素,但我不明白为什么它总是说长度是4。
我是C的新手,所以我可能会遗漏一些明显的东西。
locof是一个文件名,它不是null,并且文件已正确打开。
代码:
rescue_asset* assets;
no_of_lines = count_lines(locof);
printf("number of lines = %d \n", no_of_lines);
assets = malloc(sizeof (rescue_asset) * no_of_lines);
int size;
size = sizeof(assets);
printf("size : %d \n", size);
打印出来:
number of lines = 37
size : 4
我错过了一些明显的东西吗?
谢谢, 克里斯。
答案 0 :(得分:4)
你错过了(显然很明显,但当然你必须先知道)事实是malloc()
完成的动态内存分配只是指向第一个元素的指针。
无法从结果指针中找出分配的大小。它(或许)已经知道malloc()
的内部,但是没有办法从外面弄清楚。
所以,你的代码是正确的,但你的期望是错误的。
答案 1 :(得分:4)
sizeof(assets)
返回指针的大小,而不是数组大小。你需要变量来记住大小。
size_t size = sizeof (rescue_asset) * no_of_lines; // size_t is from stddef.h
assets = malloc(size);
printf("size : %zu \n", size); // %zu is for size_t type