返回数组大小的C总是返回相同的错误答案

时间:2013-11-25 11:26:38

标签: c arrays pointers

在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
我错过了一些明显的东西吗?

谢谢, 克里斯。

2 个答案:

答案 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