すべてのコンテキストを把握しているわけではありませんが、これは実際には 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]
割り当てられたメモリの個々のバイトにアクセスします。asargList
を宣言すると、上記で行ったように、個々の要素にインデックスを付けると、割り当てられたメモリがバイト単位でステップ実行されます。コンパイラは、ターゲット アーキテクチャの正しいポインター サイズを自動的に補正します。argList
id
argList
sizeof(id)
malloc()
によって返されるポインターがであると仮定すると、と宣言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 ビット モードで機能した理由がわかりません。