C 为什么这个程序会崩溃?

C 为什么这个程序会崩溃?,c,crash,C,Crash,这个小C程序每次都会崩溃 它应该以3D网格的形式分配一块内存,该网格由许多结构(单元)组成,这些结构(单元)以3D友好模式布置在内存中。结构将填充位置数据 我不知道它为什么会崩溃。它返回这个数字:c0000005 #include <stdio.h> #include <malloc.h> typedef struct { int coords[3]; } cell; int main() { int x=4, y=8, z=6; int volu

这个小C程序每次都会崩溃

它应该以3D网格的形式分配一块内存,该网格由许多结构(单元)组成,这些结构(单元)以3D友好模式布置在内存中。结构将填充位置数据

我不知道它为什么会崩溃。它返回这个数字:c0000005

#include <stdio.h>
#include <malloc.h>

typedef struct {
int coords[3];
} cell;

int main() {

    int x=4, y=8, z=6;

    int volume=x*y*z;

    cell *arr=(cell*)calloc(volume,sizeof(cell));

    int u=0,v=0,w=0;
    int index;

    for (w=0; w<z; w++) {
    for (v=0; v<y; v++) {
    for (u=0; u<x; u++) {

        //printf("%d %d %d\n", u, v, w);

        index=u+v*y+w*y*z;

        arr[index].coords[0]=u;
        arr[index].coords[1]=v;
        arr[index].coords[2]=w;

        //getchar();

    }}}

    printf("All done.\n");

    return 0;
}
#包括
#包括
类型定义结构{
国际协调[3];
}细胞;
int main(){
int x=4,y=8,z=6;
整数体积=x*y*z;
cell*arr=(cell*)calloc(体积,大小(cell));
int u=0,v=0,w=0;
整数指数;

对于(w=0;w而言,问题是
索引=u+v*y+w*y*z;

它应该是
index=u+v*x+w*y*x;


所以@nos是对的。它触发了一个分段错误,因为
6=z>x=4
index
变得太大。

使用所有警告和调试信息(
gcc-Wall-g
)编译程序。然后使用调试器(
gdb
)您在计算索引时混淆了维度。当然u+vy+wyz会大于xy*z,因此您正在索引到未分配的内容。@重复数据消除或如果我没有强制转换calloc,则comp返回一个错误,该错误表示:“从void*到cell*的转换无效”