我通常在 Objective-C 中工作,但现在我正在尝试集成一些我不太了解的 C 代码。
让我们从我的 Buffer 对象开始:
@interface Buffer : NSObject {
int* buffer_;
int numFrames_;
int idNumber_;
}
@property (nonatomic) int* buffer;
@property (nonatomic) int numFrames;
@property (nonatomic) int idNumber;
在另一个类中,我试图动态创建 c 数组并将它们粘贴到我的缓冲区对象的缓冲区中。需要注意的是,我并不知道我事先需要多少缓冲对象。
for (i=0; i<[arrayOfFlags count]; i++) {
NSNumber *flagObject = (NSNumber*)[arrayOfFlags objectAtIndex:i];
int flagInt = [flagObject integerValue];
Buffer *snippetBuffer = [[Buffer alloc] init];
int returnArray[44000];
snippetBuffer.buffer = returnArray;
snippetBuffer.numFrames = 44000;
snippetBuffer.idNumber = i;
int k;
// NSLog(@"creating snippet buffer at flag %d", flagInt);
for (k = 0; k < 44000; k++) {
snippetBuffer.buffer[k] = // insert some values here.
}
}
当我运行此代码时,所有缓冲区对象都具有与要生成的最后一个对象相同的数据。我认为正在发生的事情是 returnArray 在每次迭代时被覆盖。
那么如何确保每次在循环中实例化 c 数组时都分配新内存? (如果这确实是我的问题)。
希望这个问题不要太复杂。请随时提问。
最佳答案
int returnArray[44000];
snippetBuffer.buffer = returnArray;
这是对您的 snippetBuffer.buffer
指针的错误初始化,因为 returnArray
是局部变量并在作用域结束时被销毁。
改用
snippetBuffer.buffer = (int*)malloc(44000*sizeof(int));
完成后记得调用free
释放内存。
关于objective-c - 在 C 中动态分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547307/