Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在目标c中,浮点数组在其末尾提供不同的数据_Objective C_C_Arrays - Fatal编程技术网

Objective c 在目标c中,浮点数组在其末尾提供不同的数据

Objective c 在目标c中,浮点数组在其末尾提供不同的数据,objective-c,c,arrays,Objective C,C,Arrays,我遇到了一个奇怪的错误。(至少对我来说)我正在尝试在FFT和我应用的音频滤波器中使用浮点数组。但是浮点数组在最后给出了不同的数据 我定义了一个全局指针。我将一个浮点数组指向它。但是,当我尝试在方法范围之外的某个地方使用指针时,441000个数据中的最后100-150个数据大多得到0或其他一些非常大的数字。我不明白当我在范围之外的某个地方使用数据时,数据是如何变化的 在作用域中,我在其中循环,并且每个数据都是正确的,但是当我尝试在我创建数组的方法的作用域之外循环时,它在最后给出了不同的数据 @in

我遇到了一个奇怪的错误。(至少对我来说)我正在尝试在FFT和我应用的音频滤波器中使用浮点数组。但是浮点数组在最后给出了不同的数据

我定义了一个全局指针。我将一个浮点数组指向它。但是,当我尝试在方法范围之外的某个地方使用指针时,441000个数据中的最后100-150个数据大多得到0或其他一些非常大的数字。我不明白当我在范围之外的某个地方使用数据时,数据是如何变化的 在作用域中,我在其中循环,并且每个数据都是正确的,但是当我尝试在我创建数组的方法的作用域之外循环时,它在最后给出了不同的数据

@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谢谢,现在我看到了我的错误:)。我希望我也能选择你的解决方案。谢谢