2

NSStrings で満たされた NSarray を変換し、この C 配列を関数に返す必要があります。

-(char**) getArray{
        int count = [a_array count];
        char** array = calloc(count, sizeof(char*));

        for(int i = 0; i < count; i++)
        {
             array[i] = [[a_array objectAtIndex:i] UTF8String];
        }
        return array;     
}

私はこのコードを持っていますが、何かを返す場合、いつメモリを解放する必要がありますか?

4

2 に答える 2

5

配列内の各文字列にもメモリを割り当てる必要があります。 strdup()これでうまくいくでしょう。また、配列の末尾に a を追加する必要があるNULLため、配列の末尾がわかります。

- (char**)getArray
{
    unsigned count = [a_array count];
    char **array = (char **)malloc((count + 1) * sizeof(char*));

    for (unsigned i = 0; i < count; i++)
    {
         array[i] = strdup([[a_array objectAtIndex:i] UTF8String]);
    }
    array[count] = NULL;
    return array;     
}

配列を解放するには、次を使用できます。

- (void)freeArray:(char **)array
{
    if (array != NULL)
    {
        for (unsigned index = 0; array[index] != NULL; index++)
        {
            free(array[index]);
        }
        free(array);
    }
}
于 2012-10-25T09:00:48.967 に答える
1

返す配列はchar**、getArray() 関数の呼び出し環境でいくつかの識別子にキャッチされます。これを使用して、 getArray() 関数内でfree割り当てたメモリを使用できます。calloc()

int main()
{
 char **a=getArray();
 //use  a as your requirement
 free(a);
}
于 2012-10-25T08:56:05.850 に答える