gpt4 book ai didi

c++ - 在 C++ 中返回 float 组

转载 作者:行者123 更新时间:2023-11-28 07:41:04 24 4
gpt4 key购买 nike

我将一个非常大的 float 组与 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 channel 发送到一个选择器并让它返回一个 float 组。

- (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++ - 在 C++ 中返回 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15858332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com