gpt4 book ai didi

c - 4维数组分配: access violation

转载 作者:行者123 更新时间:2023-12-01 12:53:44 26 4
gpt4 key购买 nike

我写了这段简单的代码来动态分配一个 4 维数组:

#include <stdlib.h>
#include <stdio.h>

int**** alloc() {

int i,j,k;
int ****matrix;
int x,y,z,n_pairs;

x= 62;
y= 45;
z= 28;
n_pairs = 4;

matrix = (int ****) malloc(x*sizeof(int***));

for (i=0; i<x; i++) {
matrix[i] = (int ***) malloc(y*sizeof(int**));

if(matrix[i]==NULL)
return NULL;

for (j=0; j<y; j++) {
matrix[i][j] = (int **) malloc(z*sizeof(int*));

if (matrix[i][j] == NULL)
return NULL;

for (k=0; k<n_pairs; k++) {
matrix[i][j][k] = (int *)calloc(n_pairs,sizeof(int));

if (matrix[i][j][k] == NULL)
return NULL;
}
}
}

return matrix;
}


void freeMatrix(int ****m) {

int i,j,k;
int x,y,z;

x= 62;
y= 45;
z= 28;


for(i=0; i<x; i++) {
for(j=0; j<y; j++) {
for(k=0; k<z; k++)
free(m[i][j][k]);

free(m[i][j]);
}

free(m[i]);
}

free(m);
}

int main() {

int i,j,k,h;
int ****m = NULL;

m = alloc();

for(i=0;i<62;i++)
for(j=0;j<45;j++)
for(k=0;k<28;k++)
for(h=0;h<4;h++)
printf("%d\t",m[i][j][k][h]);

system("pause");

return 0;
}

问题是当我尝试执行这段代码时,它导致了访问冲突。这不是分配/释放多维数组的正确方法吗?如果是,那么问题是什么?

最佳答案

这里有一个问题:

        for (k=0; k<n_pairs; k++) { //<----- This should read `k<z'
matrix[i][j][k] = (int *)calloc(n_pairs,sizeof(int));

您可能打算循环到 z,而不是 n_pairs

关于c - 4维数组分配: access violation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787381/

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