我一直在为我的电磁仿真课程编写一段代码,但遇到了一个问题。我决定做一些额外的事情,将原始计算扩展到多达 10^8 个元素的非常大的网格,所以现在我必须使用 malloc()。
到目前为止,一切都很好,但是由于我更喜欢将代码保存在库中,然后使用编译器的 inline 选项进行编译,因此我需要一种在函数之间传递信息的方法。所以,我开始使用结构来跟踪网格的参数,以及指向信息数组的指针。我通过以下方式定义了结构:
typedef struct {
int height;
int width;
int bottom; //position of the bottom node
unsigned int*** dat_ptr;//the pointer to the array with all the data
} array_info;
其中指向无符号整数的三重指针是指向二维数组的指针。我必须这样做,否则它是按值传递的,我无法从函数内更改它。
现在,当我尝试使用以下函数为结构分配内存时:
void create_array(array_info A)//the function accepts struct of type "array_info" as argument
{
int i;
unsigned int** array = malloc(sizeof(*array) * A.height);//creates an array of arrays
for(i = 0; i<A.height; ++i)
{
array[i] = malloc(sizeof(**array) * A.width);//creates an array for each row
}
*A.dat_ptr=array;//assigns the position of the array to the input pointer
}
执行操作时出现分段错误。我不明白为什么:sizeof(*A.dat_ptr) 与 sizeof(array) 相同。因此,在最坏的情况下,我应该在某个地方出现胡言乱语,而不是在分配行中,对吧?