跟了两天知道异常在什么地方了,可是不知道如何解决,

跟了两天知道错误在什么地方了,可是不知道怎么解决,求助。
//错误代码模拟:
//希望大家能指点一下,我是真的看不懂了


// 2412451.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"

struct ps
{
int n ;
struct ps *pNext ;
};

void show(ps **pHead, int m) ;


int _tmain(int argc, _TCHAR* argv[])
{
struct ps ** pHead = new ps *[6] ;
for (int i=0; i<6; i++)
{
pHead[i] = new ps ;
pHead[i]->n = i ;
pHead[i]->pNext = NULL ;
}

ps ** dada = pHead ;

for (int m=0; m<6; m++)
{
show(&dada[m], m) ;
}

system("pause") ;
return 0; 
}



void show(ps **pHead, int m) //我不知道的是,为什么执行这个函数时pHead的表头会往后移
{
ps * dd = pHead[m] ;
int a = dd->n ; //如果注释掉这行的话就不会出现这种情况
}

------解决方案--------------------
探讨
//错误代码模拟:
//希望大家能指点一下,我是真的看不懂了


// 2412451.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"

struct ps
{
int n ;
struct ps *pNext ;
};

void show(ps **pHead, int m) //我不知道的是,为什么执行这个函数时pHead的表头会往后移
{
ps * dd = pHead[m] ;
int a = dd->n ; //如果注释掉这行的话就不会出现这种情况
}
……

------解决方案--------------------
ps ** dada = pHead ;

 for (int m=0; m<6; m++)
 {
 show(&dada[m], m) ;
 }
void show(ps **pHead, int m) //我不知道的是,为什么执行这个函数时pHead的表头会往后移
{
 ps * dd = pHead[m] ;
 int a = dd->n ; //如果注释掉这行的话就不会出现这种情况
}

把for循环中的语句展开就是:
for (int m=0; m<6; m++)
 {
 //show(&dada[m], m) ;
 ps **t_pHead=&data[m];
 ps *dd =t_pHead[m];// 等同于 data+m + m = &data[2*m]
 int a=dd->n;// data[2*m]->n
 }