关于模拟指针的问题

nothinger 2007-04-20 01:27:19
哪位高手能告诉我在C++中模拟指针怎么定义啊?

这样的一个函数有什么错啊?
void SimNode(int n,int m)
{
int i,number=0;
Josephus **node;
*node=new Josephus[n];
for(i=0;i<n-1;i++)
{
node[i]->data=i+1;
node[i+1]=node[i]->next;
}
node[n-1]->data=i+1;
node[n-1]->next=node[0];

i=0;
while(number<n-1)
{
int counter=0;
while(counter<m)
{
if(node[i%n]->data!=0)
counter++;
node[i++%n]=node[i%n]->next;
}
cout<<node[i%n]->data<<" ";
node[i%n]->data=0;
number++;
}

for(i=0;i<n;i++)
{
if(node[i]!=0)
cout<<node[i]->data<<endl;
}
}

谢谢啦
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2007-04-20
  • 打赏
  • 举报
回复
C++中本来就有指针,为啥还要“模拟”啊?
lidongri 2007-04-20
  • 打赏
  • 举报
回复
Josephus **node;
---
都是指针的指针了,还怎么模拟???
不懂
飞哥 2007-04-20
  • 打赏
  • 举报
回复
啥叫模拟指针啊
longshanks 2007-04-20
  • 打赏
  • 举报
回复
Josephus **node;
*node=new Josephus[n];
这两句有错。不,如果分开,这两句都没错,但他们这样凑在一起,就有错了。
Josephus **node;
之后,node没有初始化,指向一个无效值,在windows中通常是0xCCCCCCCC。由于这是一个指针的指针,所以,*node将会让你把new Josephus[n]获得的地址存放到0xCCCCCCCC这个地址中。这个地址是不可访问的。所以,一旦运行,便会发生不可预见的错误。在windows中通常是一个常规保护错,也就是通常所说的非法访问。
此后,每一个node[]访问,都会引发一个非法访问,理由同上。

65,212

社区成员

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

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