三维malloc'的分段断层;ed阵列

三维malloc'的分段断层;ed阵列,c,segmentation-fault,C,Segmentation Fault,当我编译并退出C代码时,我得到了一个分段错误。当我尝试运行GDB时,结果如下: Program received signal SIGSEGV, Segmentation fault. 0x0000000000400998 in main (argc=2, argv=0x7fffffffe208) at test.c:107 所涉行: if((p_l2p[p_bp][p_rp][p_cp] & FULL) == 0) 变量声明: unsigned long long ***p_l2p

当我编译并退出C代码时,我得到了一个分段错误。当我尝试运行GDB时,结果如下:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400998 in main (argc=2, argv=0x7fffffffe208) at test.c:107
所涉行:

if((p_l2p[p_bp][p_rp][p_cp] & FULL) == 0)
变量声明:

unsigned long long ***p_l2p; //Primary L2P[P_Bank][Row][Cas]
p_l2p = (unsigned long long ***)malloc(sizeof(int **)*P_BANK);

for(i=0;i<P_BANK;i++) // set s[P_Bank][Row]
{
    p_l2p[i] = (unsigned long long **)malloc(sizeof(int*)*ROW);         

    for(j=0;j<ROW;j++) // set s[P_Bank][Row][CAS]
    {
        p_l2p[i][j] = (unsigned long long *)malloc(sizeof(int)*CAS);

    }
}

int p_bp; //Bank Point
int p_rp; //Row Point
int p_cp; //Cas Point
unsigned long***p_l2p//小学L2P[P_Bank][Row][Cas]
p_l2p=(无符号长***)malloc(sizeof(int**)*p_银行);
对于(i=0;i
此分段错误的原因是什么

分配的内存不足

int
的大小小于此处的
无符号long
的大小


避免尺寸计算错误-其中有1个是最内部的

分配给对象的大小,而不是类型

the_type_is_irrelevant ***p_l2p;

// p_l2p = (unsigned long long ***)malloc(sizeof(int **)*P_BANK);
p_l2p = malloc(sizeof *p_l2p * P_BANK);

for(i=0; i<P_BANK; i++) {
    // p_l2p[i] = (unsigned long long **)malloc(sizeof(int*)*ROW);         
    p_l2p[i] = malloc(sizeof p_l2p[i][0] * ROW);         

    for(j=0; j<ROW; j++) {
        // p_l2p[i][j] = (unsigned long long *)malloc(sizeof(int)*CAS);
        p_l2p[i][j] = malloc(sizeof p_l2p[i][j][0]* CAS);

    }
}

如果
p_l2p
被定义为指向
无符号long-long
(通常为8个字节)的指针,为什么在mallocing时给它
sizeof(int)
(通常为4个字节)?非常感谢!
p_l2p = malloc(sizeof *p_l2p * P_BANK);
if (p_l2p == NULL && P_BANK > 0) {
  Handle_Out_of_Memory();
}