gpt4 book ai didi

将 * 指针转换为 *** 指针

转载 作者:行者123 更新时间:2023-12-04 19:48:26 24 4
gpt4 key购买 nike

假设我有一个平坦的、动态分配的一维数组(我们称它为 vector),它将包含一些 3d 数据。有什么方法可以创建另一个指针(让我们称它为 tensor),将 vector 视为 3d 数组,这样我就可以将其作为 tensor[i ][j][k]?

我尝试了以下方法,但它不起作用:

int x, y, z; //Number of rows, cols, ...
double *vector;
double ***tensor;

x = 10; y = 10; z = 10;
vector = (double *) malloc(x * y * z * sizeof(double));

tensor = (double ***) vector;
tensor[0] = (double **) vector;
tensor[0][0] = (double *) vector;

for(j = 1; j < y; j++) {
tensor[0][j] = tensor[0][j-1] + z;
}
for(i = 1; i < x; i++) {
tensor[i] = tensor[i - 1] + y;
tensor[i][0] = tensor[i - 1][0] + y * z;
for(j = 1; j < y; j ++) {
tensor[i][j] = tensor[i][j - 1] + z;
}
}

tensor[0][0][0] = 1.0; //Segfaults here
tensor[0][0][1] = 2.0;
...

我做错了什么?

最佳答案

我可以举个例子,将二维数组分配为指针数组加上一维数据数组在一个 malloc 中

const int M = 100;
const int N = 200;
int **a = NULL;
int i, j;

a = malloc(M * sizeof(int*) + N * M * sizeof(int));
a[0] = (int*)(a + M);
for (i = 1; i < M; i++) {
a[i] = a[0] + i * N;
}

//some code

free(a);

一张图片

enter image description here

在两个 mallocs 中

const int M = 100;
const int N = 200;
int **a = NULL;
int i;

a = malloc(M * sizeof(int*));
a[0] = malloc(M * N * sizeof(int));
for (i = 1; i < M; i++) {
a[i] = a[0] + i * N;
}

//Some code

free(a[0]);
free(a);

一张图片

enter image description here

这里有两个好处:第一 - 快速分配,第二 - a[0] 是一维数组的开始,所以你可以把它当作一维。是的 - 我懒得发布 3d 阵列的完整解决方案。

关于将 * 指针转换为 *** 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com