好的,我终于找到了问题。它在 C 函数(CarbonTuner2)而不是 objC 方法中。我在函数内部创建了一个与文件大小相同的数组,所以如果文件大小很大,它会创建一个非常大的数组,我的猜测是,当我从那里调用另一个函数时,局部变量被放在堆栈上创建了 EXC_BAD_ACCESS。我当时所做的不是使用变量来声明数组的大小,而是直接输入数字。然后代码甚至没有编译。它知道。错误类似于:数组大小太大。我想连续工作 20 多个小时并不好 XD 但我肯定会研究除逐步调试以外的工具来解决这些问题。谢谢你的帮助。这是代码。如果将 gFileByteCount 除以 2,则不再出现错误:
// ConverterController.h
# import <Cocoa/Cocoa.h>
# import "Converter.h"
@interface ConverterController : NSObject {
UInt64 gFileByteCount ;
}
-(IBAction)ProcessFile:(id)sender;
void CarbonTuner2(long numSampsToProcess, long fftFrameSize, long osamp);
@end
// ConverterController.m
# include "ConverterController.h"
@implementation ConverterController
-(IBAction)ProcessFile:(id)sender{
UInt32 packets = gTotalPacketCount;//alloc a buffer of memory to hold the data read from disk.
gFileByteCount=250000;
long LENGTH=(long)gFileByteCount;
CarbonTuner2(LENGTH,(long)8192/2, (long)4*2);
}
@end
void CarbonTuner2(long numSampsToProcess, long fftFrameSize, long osamp)
{
long numFrames = numSampsToProcess / fftFrameSize * osamp;
float g2DFFTworksp[numFrames+2][2 * fftFrameSize];
double hello=sin(2.345);
}