Gtk 将GPtrArray对象声明为本地

Gtk 将GPtrArray对象声明为本地,gtk,gnome,glib,Gtk,Gnome,Glib,我已经在本地方法中使用gptraray类的g\u ptr\u array\u size\u new()创建了一个指针 但当我退出for循环时,该指针为空。怎么了?以下是本地方法中的实现: GPtrArray* myMethod() { GPtrArray *typePtr = g_ptr_array_sized_new(10); string *str1; for(int i = 0; i < 5; i++) { str1 = new st

我已经在本地方法中使用
gptraray
类的
g\u ptr\u array\u size\u new()
创建了一个指针

但当我退出for循环时,该指针为空。怎么了?以下是本地方法中的实现:

GPtrArray* myMethod()
{
    GPtrArray *typePtr = g_ptr_array_sized_new(10);

    string *str1;
    for(int i = 0; i < 5; i++)
    {
        str1 = new string();
        str1->assign("Name"); 
        g_ptr_array_add(typePtr,(gpointer)str1->c_str());
    }
    return typePtr;
}
GPtrArray*myMethod()
{
GPtrArray*typePtr=g_ptr_阵列大小_新(10);
字符串*str1;
对于(int i=0;i<5;i++)
{
str1=新字符串();
str1->分配(“名称”);
g_ptr_array_add(typePtr,(gpointer)str1->c_str());
}
返回类型PTR;
}

您在问题中提到了g_ptr_array_fixed_new,但在代码中提到了g_ptr_array_size_new。你用的是哪一个?在for循环之前你检查过typePtr是否为空吗?@Jong:是的,我检查过typePtr,内存已经分配好了。但是当我退出循环时,它是空的。这真的很奇怪,因为唯一可以修改typePtr的函数是g_ptr_array_add,它是一个实函数(不是宏),所以它不能在myMethod的范围内修改typePtr的值。在循环中检查typePtr是否为null可能会给正在发生的事情提供一些线索。@boom,我已经尝试了你的代码,它似乎起作用了。您能检查指针在循环中何时变为NULL吗?