日期:2014-05-16  浏览次数:20641 次

一个关于GTK 申请内存的问题
struck   cc
{
    int   a;
    char   c;
};
cc   *fun()
{
      cc   *a=new   cc;
      return   a;
}//在C/C++里面   这里的返回值一定会报错的    

//原因应该是   函数栈   不同   导致申请的地址空间在   下面的main()函数里面无法找到吧??
void   main()
{
    cc   *b;
    b=fun();
}

//下面用GTK写的代码  

GtkWidget   *fun()
{
    GtkWidget   *button;
    button=gtk_button_new();
    gtk_widget_show(button);
return   button;
}

int   main(int   argc,char   *argv[])
{

      GtkWidget   *button;
      button=fun();
      ...
      return   0;
}
//这两个错误是不是一样的?   难道这个GTK不是犯了一样的错误吗?   但是为什么GCC貌似没有报错??
//小弟新手     望高人指点

------解决方案--------------------
struct cc
{
int a;
char c;
};

cc *fun()
{
cc *a=new cc;
return a;
}

int main()
{
cc *p=fun();
p-> a=12;
p-> c= 'b ';
printf( "%d,%c ",p-> a,p-> c);
return 0;
}
用DEV C++编译没有错误啊。


下面改为:
GtkWidget *fun()
{
GtkWidget *button;
button=gtk_button_new_with_label( "OK ");
gtk_widget_resize(button);
return button;
}

int main(int argc,char *argv[])
{

GtkWidget *button;
button=fun();
...
return 0;
}