gpt4 book ai didi

c - 尝试分配连续的内存块并使用 3 个索引访问它,但我的方法出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:31:37 25 4
gpt4 key购买 nike

我正在尝试编写一个过程,让我分配大小为 n1*n2*n3 的连续内存块并使用 3 个索引访问它,就像使用数组一样

int array[n1][n2][n3];

我已经成功地(据我所知)用两个索引管理了这个(参见下面的示例)

#include <stdlib.h>

int main() {

// Dimensions
const int n1 = 2;
const int n2 = 2;

int **array;

// Pointers
array = (int **)malloc(n1*sizeof(int *));

// Contiguous chunk of memory of size n1xn2
array[0] = (int *)malloc(n1*n2*sizeof(int));

// Pointer arithmetic
for(int i=0;i<n1;i++) {
array[i] = array[0] + i*n2;
}

array[0][0] = 1;

return EXIT_SUCCESS;
}

但是当我尝试使用三个索引的类似构造时,我的过程会抛出段错误:

#include <stdlib.h>

int main() {

// Dimensions
const int n1 = 2;
const int n2 = 2;
const int n3 = 2;

int ***array;

// Pointers
array = (int ***)malloc(n1*sizeof(int **));
array[0] = (int **)malloc(n1*n2*sizeof(int *));

// Contiguous chunk of memory of size n1xn2xn3
array[0][0] = (int *)malloc(n1*n2*n3*sizeof(int));

// Pointer arithmetic
for(int i=0;i<n1;i++) {
for(int j=0;j<n2;j++) {
array[i][j] = array[0][0] + i*n2*n3 + j*n2;
}
}

array[0][0][0] = 1;

return EXIT_SUCCESS;
}

我知道还有其他方法可以管理连续的内存块。我特别感兴趣的是为什么我的逻辑在上述情况下失败了。

最佳答案

你可能错过了

array[i] = array[0] + i*n2;

这是您的代码

#include <stdlib.h>

int main() {

// Dimensions
const int n1 = 2;
const int n2 = 2;
const int n3 = 2;

int ***array;

// Pointers
array = (int ***)malloc(n1*sizeof(int **));
array[0] = (int **)malloc(n1*n2*sizeof(int *));

// Contiguous chunk of memory of size n1xn2xn3
array[0][0] = (int *)malloc(n1*n2*n3*sizeof(int));

// Pointer arithmetic
for(int i=0;i<n1;i++) {
array[i] = array[0] + i*n2;
for(int j=0;j<n2;j++) {
array[i][j] = array[0][0] + i*n2*n3 + j*n2;
}
}

array[0][0][0] = 1;

return EXIT_SUCCESS;
}

关于c - 尝试分配连续的内存块并使用 3 个索引访问它,但我的方法出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50493118/

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