使用 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 的大小你能告诉我我做错了什么吗?
【问题讨论】:
不要转换malloc
或calloc
的结果。
sizeof(X)
是sizeof(int*)
。
答案:***.com/a/605858/694576@dreamcrash
【参考方案1】:
X
和 xd_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_Type_create_struct() 在 C 中传输包含动态数组的结构