• 4576阅读
  • 8回复

指针数组 声明问题 [复制链接]

上一主题 下一主题
离线rockyluo
 

只看楼主 倒序阅读 楼主  发表于: 2008-10-08
— 本帖被 XChinux 执行加亮操作(2008-10-12) —
问个问题:
我现在有个Form1
++++++++++ form1.h ++++++++++
class Form1::QWidget(...)
{
public:
    int n;
    int num;
    QTabWidget *tw[];
    // MyWidget *my[];    //$$
}
-------------------------------------

++++++++++ form1.cpp +++++++++
Form1::Form1
{   
    n=3;
    for(int i=0;i<n;i++)
    {
        tw[ i ]=new QTabWidget(this);
    }

    num=8;
    MyWidget *my[];      // MyWidget继承QWidget
              // 上面有好些部件
    for(int i=0;i<num;i++)
    {
        my[ i ]=new MyWidget(this);
    }

    ...    / /  后面是将各个my[ i ] 插入到一个QTabWidget中
}
---------------------------------------

状况:    1.tw[ ]声明放在.h文件中运行OK
              2.my[ ]声明如果放在.cpp中(如上所示),编译、运行均OK
                  但如果将其放入.h中(如"$$"处所示),则编译会通过,而运行时出现段错误!
我就纳闷,为啥tw[]放在.h中声明可以,而my[ ]放在.h中会出错呢?
我现在关键是想在.cpp的Form1{ }之外调用tw[ ] 和my[ ](.cpp中还有其它函数)。
请问这如何解决?
[ 此贴被rockyluo在2008-10-08 13:51重新编辑 ]
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线chaoscxm
只看该作者 1楼 发表于: 2008-10-08
    for(int i=0;i<num;i++)
    {
        my=new MyWidget(this);
    }
学习一下,C++初始化数组可以这样写么,不用下标?
帖子签名(将在每个帖子下方显示)
离线rockyluo

只看该作者 2楼 发表于: 2008-10-08
Form1::Form1
{   
    n=3;
    for(int i=0;i<n;i++)
    {
        tw[ i ]=new QTabWidget(this);
    }

    num=8;
    MyWidget *my[];      // MyWidget继承QWidget
              // 上面有好些部件
    for(int i=0;i<num;i++)
    {
        my[ i ]=new MyWidget(this);
    }
刚编辑掉了,原本是这样的
[ 此贴被rockyluo在2008-10-08 10:03重新编辑 ]
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 3楼 发表于: 2008-10-08
我昏,论坛编辑器有问题
输入[ i ]  ,  i  与[  ]  间非得空格
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 4楼 发表于: 2008-10-08
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线sbtree
只看该作者 5楼 发表于: 2008-10-08
引用楼主rockyluo于2008-10-08 09:49发表的 指针数组 声明问题 :
.......
++++++++++ form1.h ++++++++++
class Form1::QWidget(...)
{
public:
    int n;
    int num;
    QTabWidget *tw[];
    // MyWidget *my[];    //$$
}
-------------------------------------
++++++++++ form1.cpp +++++++++
Form1::Form1

    n=3;
    for(int i=0;i<n;i++)
    {
        tw[ i ]=new QTabWidget(this);
    }
    num=8;
  MyWidget *my[];      // MyWidget继承QWidget
              // 上面有好些部件
    for(int i=0;i<num;i++)
    {
      my[ i ]=new MyWidget(this);
    }
    ...    / /  后面是将各个my[ i ] 插入到一个QTabWidget中
}
---------------------------------------
.......

貌是这段代码很危险,因为c++编译器部检查数组越界,从而可能造成未知的(是否正在被使用的)内存内容被覆盖
windows 7 + VC++2008 + Qt4.5.2
离线rockyluo

只看该作者 6楼 发表于: 2008-10-09
sbtree说的有理,
关键我现在想动态分配空间,因为程序运行前并不知道要new出多少空间,何况程序运行时还要动态去创建部件
唯一想到的解决办法,就是在.h中给它分配一个较大的空间,比如:tw[ 100 ],然后再new,只要保证不超过100就ok

另外,想问下,那个  my [ ] 为什么不能在.h文件中声明,我声明运行时就段错误,这是怎么回事?
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线rockyluo

只看该作者 7楼 发表于: 2008-10-09
确实是如此,发生段错误的原因就是未知内存内容被覆盖,给它具体的分配空间后,一切问题已解决!
再次感谢sbtree
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线water_wf

只看该作者 8楼 发表于: 2008-10-09
使用 指针的指针解决 c/c++要求数组类型在编译时就要决定数组的大小
快速回复
限100 字节
 
上一个 下一个