我在使用 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
你能告诉我我做错了什么吗?
最佳答案
X
和 xd_real_send
被定义为指针。
应用的 sizeof
运算符返回指针使用的内存量,而不是指针所指的大小。
一旦动态分配并被某个指针引用,就不可能(以任何可移植的方式)请求内存块的大小。
对于动态分配的内存,应用程序需要注意跟踪这些内存块的大小。
test
被明确定义为数组,因此 sizeof
能够确定数组的大小。
关于c - 使用 malloc 的 MPI 动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402241/