一个关于GTK 申请内存的问题

xxgamexx 2007-06-21 01:04:06
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貌似没有报错??
//小弟新手 望高人指点
...全文
162 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxgamexx 2007-06-23
  • 打赏
  • 举报
回复
对了 还要加个 delete p;
xxgamexx 2007-06-23
  • 打赏
  • 举报
回复
另外 在STACK申请的内存会在函数执行结束时释放 但是上面的BUTTON 或者上面的结构对象p并没有释放掉内存吧?????????????


xxgamexx 2007-06-23
  • 打赏
  • 举报
回复
恩 需要把程序改为:


谢谢楼上的指正.


#include <iostream.h>
struct cc
{
int a;
char c;
};

void fun(cc *a)
{
a=new cc;

}

int main()
{

cc *p;
fun(p);
p->a=12;
p->c='b';
cout<<p->a<<p->c;


system("PASUE");
return 0;
}




但是经过一番思考后,引出第二个问题 虽然楼上写的能通过编译 但 在编程习惯的法则里


return 语句是不准返回指向STACK上的指针的
而上面却在STACK上申请了内存(STACK内存迅速,但容量低),且返回了指向STACK的指针.


在GTK中也经常这样写......所以感到有点纳闷了~~

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;
}



jufeng2309 2007-06-21
  • 打赏
  • 举报
回复
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;
}

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧