Проблемы с созданием 3d-массивов в visual studio 2013 - PullRequest
0 голосов
/ 31 августа 2018

Я давно использую следующие коды для создания и присвоения значений 3D-массивам в visual studio 2010 / cuda 7.0. Недавно я попытался перейти на visual studio 2013, но код неожиданно завершил работу. Я попытался отладить и обнаружил, что могу назначать значения только первому измерению трехмерного массива, созданного с помощью цикла for. Мне интересно, почему это может произойти? Спасибо!

выделение массива:

void * alloc1d (int  n, int  size)
{       
    void * a;
    if ((a=malloc(n*size))==NULL)
    fprintf(stderr, "warning: memory allocation failure.\n");
    return a;
}

void ** alloc2d (int nx, int ny, int size)
{
    register int i, block;
    void ** a;
    a = (void **)alloc1d(ny, sizeof(void *));
    a[0] = alloc1d(nx*ny, size);
    block = nx*size;
    for(i=1; i<ny; i++) a[i]=(void *)((int)(a[i-1])+block);
    return a;
}

void *** alloc3d (int nx, int ny, int nz, int size)
{
    void *** a;
    register int i, block;
    a = (void ***) alloc2d(ny, nz, sizeof(void *));
    a[0][0] = alloc1d(nx*ny*nz, size);
    block = nx*size;
    for(i=1; i<ny*nz; i++) a[0][i]=(void *)((int)(a[0][i-1])+block);
    return a;
}

присвоение значения

voxelgrad = (float ***)alloc3d(size[0], size[1], size[2], sizeof(float));

for (k=0;k<size[2];k++)
    {
        for(j=0;j<size[1];j++)
        {
            for(i=0;i<size[0];i++)
            {
                voxelgrad[k][j][i]=0.0; %the code will crash here. 
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...