虽然我没有所有的上下文,但我怀疑这不是一个真正的 32/64 位问题。您可能想要的是以下内容:
id *argList = malloc(sizeof(id) * argumentsCount);
根据情况,我有时喜欢像这样分配内存块,而分配已经归零:
id *argList = calloc(1UL, sizeof(id) * argumentsCount);
这两者都分配了一块内存,能够保存argumentsCount
许多指向对象的指针。您可以像这样访问各个指针:
argList[0] = [[NSString alloc] initWithUTF8String:argv[0]];
argList[1] = [[NSString alloc] initWithUTF8String:argv[1]];
NSLog(@"Argument 0 is: %@", argList[0]);
当您声明argList
为指向char
类型的指针时,正如您在示例中所做的那样,索引单个元素(即 , argList[0]
)argList[1]
将访问为 分配的内存的单个字节argList
,而不是您可能期望的单个指针。当你声明argList
asid
时,就像我在上面所做的那样,索引单个元素会逐步通过字节分配的argList
内存sizeof(id)
。编译器将自动为目标体系结构补偿正确的指针大小。
假设返回的指针malloc()
is 0x1000
,下面是一个地址表,这些地址将为 32 位和 64 位模式char *
和id *
声明计算:
32-bit: char * id * 64-bit: char * id *
argList[0]: 0x1000 0x1000 0x1000 0x1000
argList[1]: 0x1001 0x1004 0x1001 0x1008
我不知道为什么这在 32 位模式下对你有用。