返回c++中的浮点数数组
Return float array in c++
我正在使用一个非常大的浮点数组与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]
或动态分配数组。
相关文章:
- 将浮点数转换为无符号字符数组并打印出来
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- C++浮点数和字节数组的联合问题
- C/C++ - 将浮点数转换为字节数组,以便字节保持排序
- 如何创建带有字符串和浮点数的 2D 数组
- 如何使用 c++ 模板实现整数、字符串、浮点数和日期对象的数组
- 如何创建用于存储和返回浮点数数组的结构
- 我可以在CUDA设备上为包含浮点数数组的对象分配内存吗
- 使用memcpy将浮点数组复制到uint8_t的数组是否有效
- 如何将 4 个浮点数的 ps 向量转换为 4 个双精度并存储到 pd 数组
- 如何将.txt文件中的浮点数据写入带有VS2017的二维数组
- 在同一行中读取混合输入(字符串/浮点数),并将其存储在数组中
- 如何将数组的一部分从 int 转换为浮点数并将值设置为另外两个数组
- std::copy 将双精度数组复制到浮点数数组
- 将浮点数数组设置为相同值的最快方法
- 将c++中的浮点数数组返回给Python
- 返回c++中的浮点数数组
- 本地浮点数数组允许的最大大小是多少?
- SSE3本质:如何找到一个大的浮点数数组的最大值
- 搜索已排序的浮点数数组