Objective c 在目标c中,浮点数组在其末尾提供不同的数据
我遇到了一个奇怪的错误。(至少对我来说)我正在尝试在FFT和我应用的音频滤波器中使用浮点数组。但是浮点数组在最后给出了不同的数据 我定义了一个全局指针。我将一个浮点数组指向它。但是,当我尝试在方法范围之外的某个地方使用指针时,441000个数据中的最后100-150个数据大多得到0或其他一些非常大的数字。我不明白当我在范围之外的某个地方使用数据时,数据是如何变化的 在作用域中,我在其中循环,并且每个数据都是正确的,但是当我尝试在我创建数组的方法的作用域之外循环时,它在最后给出了不同的数据Objective c 在目标c中,浮点数组在其末尾提供不同的数据,objective-c,c,arrays,Objective C,C,Arrays,我遇到了一个奇怪的错误。(至少对我来说)我正在尝试在FFT和我应用的音频滤波器中使用浮点数组。但是浮点数组在最后给出了不同的数据 我定义了一个全局指针。我将一个浮点数组指向它。但是,当我尝试在方法范围之外的某个地方使用指针时,441000个数据中的最后100-150个数据大多得到0或其他一些非常大的数字。我不明白当我在范围之外的某个地方使用数据时,数据是如何变化的 在作用域中,我在其中循环,并且每个数据都是正确的,但是当我尝试在我创建数组的方法的作用域之外循环时,它在最后给出了不同的数据 @in
@interface ViewController ()
{
float *filteredData;
int theFileLengthInFrames;
}
@end
@implementation ViewController
..
..
-(void)FilterData:(float * ) rawData
{
int count = theFileLengthInFrames;
float filteredRawData[count];
for (int i = 0; i<count; i++)
{
filteredRawData[i] = rawData[i];
printf("%d_%f ",i,filteredRawData[i]);
//I check here to see the data . In here it is normal
}
filteredData = filteredRawData;
}
-(void) CalculateFFT
{
int numSamples = theFileLengthInFrames;
for (int i = 0; i<numSamples; i++)
{
printf("%d_%f ",i,filteredData[i]);
//when I check here to see the data , the last around 100 data are 0.00000 or some big number such as 250399682724883753288597504.000000
}
}
@界面视图控制器()
{
浮动*过滤器数据;
int文件长度框架;
}
@结束
@实现视图控制器
..
..
-(void)FilterData:(float*)原始数据
{
int count=文件长度帧;
浮点数filterDrawData[计数];
对于(int i=0;i您的FilterData:
方法将实例变量FilterData
指向本地数组filterdawdata
。由于filterdawdata
是在堆栈上分配的,当FilterData:
返回时,它将无效。然后FilterData
是一个悬空指针,并使用它它处于未定义的行为中
解决方案:为Filteredata
分配持久存储。我会这样做:
@implementation ViewController {
NSMutableData *filteredDataStorage;
float *filteredData;
}
-(void)FilterData:(float * ) rawData {
int count = theFileLengthInFrames;
filteredDataStorage = [NSMutableData dataWithLength:count * sizeof *rawData];
filteredData = (float *)filteredDataStorage.mutableBytes;
for (int i = 0; i<count; i++) {
filteredRaw[i] = rawData[i];
printf("%d_%f ",i,filteredRawData[i]);
//I check here to see the data . In here it is normal
}
}
@实现视图控制器{
NSMutableData*过滤器数据存储;
浮动*过滤器数据;
}
-(void)FilterData:(float*)原始数据{
int count=文件长度帧;
filteredDataStorage=[NSMutableData dataWithLength:count*sizeof*rawData];
filteredData=(float*)filteredDataStorage.mutableBytes;
对于(inti=0;ifilteredData-浮点指针是一个ivar,它的作用域是您的对象实例
filteredRawData是在方法作用域中定义的。它是位于堆栈上的数组。当filteredRawData超出作用域时,内存不再有效。从中读取最多是未定义的,可能会导致访问冲突。您可能希望使用malloc为数据动态分配内存,或者为其定义全局缓冲区你可以玩。filteredRawData是如何声明的/在哪里的?filteredRawData是如何初始化的?很抱歉,它是“另一个RawData”。在这里,我纠正了一些奇怪的情况。“浮动另一个RawData[计数];”count被定义为同一范围内的int-数组大小不需要在编译时定义吗?是否有一个徽章可以同时给出相同的答案?++Rob谢谢,现在我看到了我的错误:)。我希望我也能选择你的解决方案。谢谢