返回c++中的浮点数数组

Return float array in c++

本文关键字:浮点数 数组 c++ 返回      更新时间:2023-10-16

我正在使用一个非常大的浮点数组与CIColorCube CoreImage一起创建过滤器。由于我制作了许多过滤器,所以数据会一遍又一遍地重复,并且需要花费3分钟来编译(这真的很烦人)。我有:

- (void)performFilter {
    NSData * cube_data = [NSData dataWithBytes:[self colorCubeData] length:32*sizeof(float)];
    CIFilter *filter = [CIFilter filterWithName:@"CIColorCube"];
    [filter setValue:outputImage forKey:kCIInputImageKey];
    [filter setValue:@16 forKey:@"inputCubeDimension"];
    [filter setValue:cube_data forKey:@"inputCubeData"];
}
- (const void*)colorCubeData {
    float color_cube_data[32] = { 1,1,1,1,1,1,1,1.0 };
    return color_cube_data;
}

我把代码缩减了很多。我得到这个错误:

Address of stack memory associated with local variable 'color_cube_data' returned

我对c++比较陌生,请帮助!这可能是一个相当愚蠢的修复。

编辑1

下面是我的实际代码片段。因为我有多个需要相同格式的CIColorCube实例,所以我将每个rgba通道发送给一个选择器,并让它返回一个浮点数组。

- (const void*)colorCubeData:(float)alpha redArray:(NSArray*)redArray blueArray:(NSArray*)blueArray greenArray:(NSArray*)greenArray {
    float r1 = [[redArray objectAtIndex:0] floatValue]/255.0f;
    float r2 = [[redArray objectAtIndex:1] floatValue]/255.0f;
    float b1 = [[blueArray objectAtIndex:0] floatValue]/255.0f;
    float b2 = [[blueArray objectAtIndex:1] floatValue]/255.0f;
    float g1 = [[greenArray objectAtIndex:0] floatValue]/255.0f;
    float g2 = [[greenArray objectAtIndex:1] floatValue]/255.0f;
    color_cube_data[16384] = { r1,g1,b1,1.0,r2,g1,b1,1.0 } 
}

问题如错误所示。你将地址返回给该数组,但该数组的作用域仅限于该函数,这意味着一旦函数完成,地址将不再安全使用(即未定义行为)。您应该在更高的作用域(例如全局,类等)声明float color_cube_data[32]或动态分配数组。