1

我在使用 malloc 和 calloc 创建动态数组时遇到问题。

    int main() {
      浮动 *xd_real_send;
      int Nooflines_Real;
      诠释*X;
      浮动测试[500];

      Nooflines_Real = count_lines(infile);
      printf("Nooflines_Real: %d\n", Nooflines_Real);

      X = (int *) malloc(Nooflines_Real*sizeof(int));
      xd_real_send = (float *) calloc (Nooflines_Real,sizeof(float));

      printf("X %d 的大小,测试 %d 和 xd_real_send 的大小 %d\n",
      sizeof(X)/sizeof(int),sizeof(test)/sizeof(float),
      sizeof(xd_real_send)/sizeof(float));fflush(stdout);

    }

输出是

    Nooflines_Real:40
    X 2 的大小,测试 500 和 xd_real_send 2 的大小

你能告诉我我做错了什么吗?

4

1 回答 1

1

X并被xd_real_send定义为指针。

应用的sizeof运算符返回指针使用的内存量,而不是指针所指的大小。

一旦动态分配并由某个指针引用,就不可能(以任何可移植的方式)请求内存块的大小。

对于动态分配的内存,应用程序需要注意跟踪这些内存块的大小。


test被明确定义为数组,因此sizeof能够确定数组的大小。

于 2012-11-15T16:48:07.373 回答