Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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
在viewDidLoad中使用malloc分配的iOS阵列_Ios_Objective C_Malloc_Viewdidload_Calloc - Fatal编程技术网

在viewDidLoad中使用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

在viewDidLoad中进行动态内存分配时,会出现问题,例如数组的malloc或calloc。当我按照建议用NSMutableData替换malloc时,我也遇到了同样的问题。我不需要一个解决方案,因为我将提出我自己的解决方案,但我欢迎能够深入理解iOS内存管理的讨论。我的代码包含以下部分:

在类扩展中,我定义了指针

@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...

这个问题似乎离题了,因为它要求的是讨论,而不是问题的答案。请参阅此页面->我发布的主要原因是因为我提供了一个问题的解决方案,而我在这个或任何其他网站上都找不到答案。我看到了一些其他人提出的相关问题,可能是因为人们以不同的方式提问,但没有解决方案,所以我也相信这个话题可以从一些讨论中受益。