我尝试按如下方式初始化一些数组:
unsigned int t(sizeX*sizeY*sizeZ);
m_data = (double*) malloc(t*sizeof(double));
m_func = (double*) malloc(t*sizeof(double));
m_tmp = (double*) malloc(t*sizeof(double));
然而,在某些时候,当检查数组元素的地址时,它们是一致的,所以元素是相同的(我在第二个重叠之前得到第一个数组的前半部分)。
有什么想法吗?
答案 0 :(得分:1)
实际上我不知道你的t(...)
做了什么,但当t
是一个数字时,结果正是你所期望的,三个不同的记忆块'地址:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned int t = 2*3*4;
double *m_data = malloc(t*sizeof(double));
double *m_func = malloc(t*sizeof(double));
double *m_tmp = malloc(t*sizeof(double));
printf("array1 pointer: %p\n"
"array2 pointer: %p\n"
"array3 pointer: %p\n", m_data, m_func, m_tmp);
free(m_data);
free(m_func);
free(m_tmp);
return 0;
}
<强> 输出: 强>
array1 pointer: 0x7ff528c038c0
array2 pointer: 0x7ff528c03980
array3 pointer: 0x7ff528c03a40
答案 1 :(得分:1)
除了明显的语法错误(对于C),您的代码中存在两个主要问题
size_t
作为&#34;尺寸&#34;的类型,不仅适用于您的结果t
,还适用于其他变量sizeX
malloc
的回复。在C中,这可能意味着您正在使编译器因其错误消息而安静,而他并不知道malloc
。如果是这样,您忘记包含正确的头文件。 (你遇到的错误是你的malloc
地址首先转换为int
然后再转换为指针类型。在64位平台上,这会丢失信息。)