使用 malloc 的 MPI 动态数组

Posted

技术标签:

【中文标题】使用 malloc 的 MPI 动态数组【英文标题】:MPI dynamic array using malloc 【发布时间】:2012-11-04 07:57:17 【问题描述】:

我在使用 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 的大小

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

【问题讨论】:

不要转换malloccalloc的结果。 sizeof(X)sizeof(int*) 答案:***.com/a/605858/694576@dreamcrash 【参考方案1】:

Xxd_real_send 被定义为指针。

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

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

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


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

【讨论】:

您能否告诉我如何检查是否为 xd_real_send 创建了大小为 40 的数组。 测试((Nooflines_Real == 40) && (NULL != (xd_real_send = calloc(Nooflines_Real, sizeof(float))))@user1733911 if((Nooflines_Real == 40) && (NULL != (xd_real_send = calloc(Nooflines_Real, sizeof(float))))) printf("ok"); else printf("不行"); 输出“不好”

以上是关于使用 malloc 的 MPI 动态数组的主要内容,如果未能解决你的问题,请参考以下文章

MPI_Bcast 动态二维数组

为包含动态数组的结构创建 MPI 类型

使用 MPI_Type_create_struct() 在 C 中传输包含动态数组的结构

如何使用 malloc 动态声明结构中存在的数组

C语言里,啥时候用数组啥时候用指针和动态内存(malloc/calloc)?

C语言中malloc和静态数组最多能开到多大呢