objective-c - 在 C 中动态分配变量

标签 objective-c c memory loops initialization

我通常在 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/

相关文章:

c - 无法接收使用 NETLINK_ROUTE channel 从内核模块发送到用户应用程序的自定义消息

c - 使用 clock_gettime 和 struct stat.mtim 的时序偏差

c - 为什么声明到 main 函数中的局部字符串是 Rodata 段内存的一部分?

c++ - 特定地址的字节数组c++

vb.net - 将内存中的字节复制到 VB.NET 中的数组

ios - 如何在没有动画的情况下放松 segue?

objective-c - 应用程序被拒绝 : crashes on launch , 但在所有设备上对我来说也能正常工作

c - 标签作为 clang 中的值

iphone - UITableViewDelegate 的问题

ios - iOS8 中的多行/动态 UILabel 截断