关于用new定义static型数组的问题

samara1111 2009-03-21 08:06:17
假设在一个类中有这样一个函数
void MyClass::Test(int n)
{
int b = 10;
static int* a;
a = new int[b];
if(n==0)
{
for(int k=0; k <b; k++)
a[k] = 0;
}
a[1]++;
cout < <a[1] < <endl;
}

主函数为:
void main()
{
MyClass mycls;
for(int k=0; k <b; k++)
mycls.Test(k);
}

运行后输出结果为:1 -8343564364 -8343564364

若将类函数中
static int* a;
a = new int[b];
修改为
static int a[10];
则可正常输出为 1, 2, 3

请问该如何解决该问题。应该怎样定义事先不知道具体大小的static数组?请指教!谢谢! 没分了,以后补上。:)
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
java_lover_ 2009-03-21
  • 打赏
  • 举报
回复

static int* a;
a = new int[b];

我估摸着是这样的,a是一个静态指针
new int[b],是开辟了10个数据块,但只有头一个数据块被a修饰了,即只有第一个数据块是静态的。
而,因此在函数调用之后,非静态的堆块,没有了正确指向,反正你在堆中声明了数据块,又没有手动删除就是你的错误!
但是下面

static int a[10];

这个数组的10个元素都是静态的,所以函数执行完毕之后,它还存在,因此是正确的!


lzl_2008 2009-03-21
  • 打赏
  • 举报
回复
void MyClass::Test(int n)
{
int b = 10;
static int* a = NULL;
if(NULL == a)
{
a = new int[b];
}
if(n==0)
{
for(int k=0; k <b; k++)
a[k] = 0;
}
a[1]++;
cout < <a[1] < <endl;
}
samara1111 2009-03-21
  • 打赏
  • 举报
回复
请多关注!!谢谢

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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