различия в размещении трехмерного массива в переполнении стека

Я работаю с некоторыми изображениями в C ++, поэтому из-за размера мне нужно выделить несколько массивов.

Мне нужно использовать конкретную функцию, которая принимает массив только в качестве аргумента.

Если я инициализирую массив как глобальную переменную, как это: двойной буфер [193] [229] [193];
Я могу использовать буфер массива в функции без проблем.

Однако, если я попытаюсь выделить новый массив с помощью этой функции:

    int Create3D_Array(Type ****pResult, int x, int y, int z)
{
Type ***p = new Type **[x];
for(int i = 0; i < x; i++)
{
p[i] = new Type *[y];
for(int j = 0; j < y; j++)
p[i][j] = new Type[z];
}
*pResult = p;
return x * y * z;
}

Функция перестает работать. Я не получаю сообщений об ошибках, программы просто выходят, что означает, что существуют некоторые проблемы с индексом массива.

По сути, я хочу знать, в чем разница между функцией, которую я использую, и просто объявить массив как двойной буфер [193] [229] [193].
Спасибо всем за помощь.

——————————————РЕДАКТИРОВАТЬ — ПОЛНЫЙ КОД ——————————

 int main() {
const int yy =229;
const int zz =193;
const int xx =193;

double ***test = NULL;
Create3D_Array(&test, xx, yy, zz);/* open the volume - first and only command line argument */

mihandle_t    minc_volume;
int           result;
/* open the volume - first and only command line argument */
result = miopen_volume("image_name", MI2_OPEN_READ, &minc_volume);
/* check for error on opening */
if (result != MI_NOERROR) {
fprintf(stderr, "Error opening input file: %d.\n", result);
}

unsigned long start[3], count[3];start[0] = start[1] = start[2] = start[3] = 0;
count[0] = 193;
count[1] = 229;
count[2] = 193;
std::cout<<test[1][0][0]<<std::endl;

miget_real_value_hyperslab(minc_volume, MI_TYPE_DOUBLE, start, count, test));

std::cout<<test[1][0][0]<<std::endl;
Delete3D_Array(&test, xx, yy, zz);
return 0;

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]