在viewDidLoad中使用malloc分配的iOS阵列
在viewDidLoad中进行动态内存分配时,会出现问题,例如数组的malloc或calloc。当我按照建议用NSMutableData替换malloc时,我也遇到了同样的问题。我不需要一个解决方案,因为我将提出我自己的解决方案,但我欢迎能够深入理解iOS内存管理的讨论。我的代码包含以下部分: 在类扩展中,我定义了指针在viewDidLoad中使用malloc分配的iOS阵列,ios,objective-c,malloc,viewdidload,calloc,Ios,Objective C,Malloc,Viewdidload,Calloc,在viewDidLoad中进行动态内存分配时,会出现问题,例如数组的malloc或calloc。当我按照建议用NSMutableData替换malloc时,我也遇到了同样的问题。我不需要一个解决方案,因为我将提出我自己的解决方案,但我欢迎能够深入理解iOS内存管理的讨论。我的代码包含以下部分: 在类扩展中,我定义了指针 @interface MyFirstViewController () { float* arrayPtr; } 在viewDidLoad中,我使用malloc或call
@interface MyFirstViewController () {
float* arrayPtr;
}
在viewDidLoad中,我使用malloc或calloc为阵列分配了内存:
arrayPtr = malloc(100 * sizeof(float));
NSAssert(arrayPtr != NULL, @"Could not allocate memory for an array.");
指针将被传递到另一个objective-c类,该类将用数据填充数组。该应用程序将随时崩溃。在索引的适当范围内丢失对不同索引的阵列的访问。它的行为似乎就好像该数组被解除分配一样
我的解决方案:
仅在viewDidLoad中将指针设置为NULL
arrayPtr = NULL;
在需要数组的方法中,只在第一次分配它
if (arrayPtr == NULL) {
arrayPtr = calloc(100, sizeof(float)); // malloc is also working
NSAssert(arrayPtr != NULL, @"Could not allocate memory for an array");
}
// use the pointer (array) here. Pass it to the other class as needed...
这个问题似乎离题了,因为它要求的是讨论,而不是问题的答案。请参阅此页面->我发布的主要原因是因为我提供了一个问题的解决方案,而我在这个或任何其他网站上都找不到答案。我看到了一些其他人提出的相关问题,可能是因为人们以不同的方式提问,但没有解决方案,所以我也相信这个话题可以从一些讨论中受益。