0

我有一个字符串数字的 2D NSArray,我想将其转换为双精度的 2D C 数组,以用于 BLAS/LAPACK 函数(通过加速框架)。这行代码似乎可以工作,但似乎效率极低,最终由于 malloc 错误而崩溃。有没有更有效的方法将此 2D NSArray 转换为 C 数组?还是将 NSArrays 与 BLAS/LAPACK 一起使用的便捷方式?

double gridDataC[[nrows intValue]+1][[ncol intValue]+1];

for(i=6;i<[fileLines count]-1;i++){
    for(j=0;j<[ncol intValue]-1;j++){
        gridDataC[i][j]=[[[[fileLines objectAtIndex:i] componentsSeparatedByString:@" "] objectAtIndex:j] doubleValue];
    }  
} 

fileLines 是一个数组,其中包含被解析为相应数字的文件行。

4

1 回答 1

0

这里很少有涉及记忆的东西。

1.componentsSeparatedByString:创建一个自动释放的数组。由于您正在循环该字符串中的每个对象,因此您正在多次创建类似的数组。由于 autoreleased 的对象直到 r​​unloop 结束才被释放,这可能会阻塞内存。最好通过将方法调用带出内部循环来执行此操作。

2. 的值i是最混乱的。您i作为gridDataC. 如果i - 6您从i = 6.

double gridDataC[[nrows intValue] + 1][[ncol intValue] + 1];

for( i = 6; i < [fileLines count] - 1; i++ ){
    NSArray * components = [[fileLines objectAtIndex:i] componentsSeparatedByString:@" "];
    for( j = 0; j < [ncol intValue] - 1; j++ ){
        gridDataC[i - 6][j] = [[components objectAtIndex:j] doubleValue];
    }  
} 
于 2011-06-15T01:34:01.700 回答