c - 使用 malloc 的 MPI 动态数组

标签 c arrays

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


    int main() {
      float *xd_real_send;
      int Nooflines_Real;
      int *X;
      float test[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("size of X %d, test %d and size of xd_real_send %d\n",
      sizeof(X)/sizeof(int),sizeof(test)/sizeof(float),
      sizeof(xd_real_send)/sizeof(float));fflush(stdout);

    }

输出是

    Nooflines_Real: 40
    size of X 2, test 500 and size of xd_real_send 2

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

最佳答案

Xxd_real_send 被定义为指针。

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

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

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


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

关于c - 使用 malloc 的 MPI 动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402241/

相关文章:

PHP Foreach数组转表格显示

c - 从c中的链表中删除节点

c - 将文本行存储在数组中,C

javascript - javascript中推送和普通数组分配之间的区别

c - 在 C 中用变量初始化数组

javascript - <li></li> 中的数组值

javascript - 比较两个数组中的对象并根据 JavaScript 中的匹配返回

c - C 中的数组指针与常规指针

c - 通过链表迭代导致段错误

c - 管道陷入读取状态(C - 系统调用)