Обратите внимание, что 512 ^ 2 НАМНОГО больше 200 ^ 2, и я подозреваю, что это проблема с памятью.
Вы должны выделить память с помощью mallo c и переместить код в C. Это мое предложение, основанное на требованиях - много памяти и множество двойников. Если бы вы могли использовать здесь числа с плавающей запятой или даже целые числа, это также резко уменьшило бы требования к ресурсам, так что посмотрите, может ли это сработать.
По крайней мере, с Objective- C это довольно легко сделать, но вам, вероятно, следует обернуть все этого тоже внутри autoreleasepool
.
Давайте сначала попробуем простой способ. Посмотрите, работает ли следующее:
// Allocate the memory
tmp_var = malloc( IMG_SQSIZE * sizeof( double ) );
tmp_var2 = malloc( IMG_SQSIZE * sizeof( double ) );
if ( tmp_var && tmp_var2 )
{
// ... do stuff
// ... see if it works
// ... if it crashes you have trouble
// ... when done free - below
}
else
{
// Needs better handling but for now just to test
NSLog( @"Out of memory" );
}
// You must to call this, ensure you do not return
// without passing here
free ( tmp_var );
free ( tmp_var2 );
EDIT
Вот еще одна версия, которая выполняет одиночный mallo c. Не уверен, что будет лучше, но стоит попробовать ... если память не проблема, этот должен работать лучше.
// Supersizeme
tmp_var = malloc( 2 * IMG_SQSIZE * sizeof( double ) );
if ( tmp_var )
{
// This points to the latter portion
tmp_var2 = tmp_var + IMG_SZSIZE;
// ... do stuff
// ... see if it works
// ... if it crashes you have trouble
// ... when done free - below
}
else
{
// Needs better handling but for now just to test
NSLog( @"Out of memory" );
}
// You must to call this, ensure you do not return
// without passing here
free ( tmp_var );
Кроме того, в обоих случаях вам необходимо определить переменные как
double * tmp_var;
double * tmp_var2;