linux容易的c++ long类型数据写文件不一致,郁闷

linux简单的c++ long类型数据写文件不一致,郁闷
我在把一个树的结点写文件时,记录了结点的开始地址,然后将开始地址赋给了父节点的孩子数组里面,地址类型我定义的long型

为了观察孩子在文件中的位置信息,我写内部结点的时候输出了每个孩子的文件指针值
linux容易的c++ long类型数据写文件不一致,郁闷

然后在读树的时候,也同样输出了每个内部结点孩子的文件指针值
linux容易的c++ long类型数据写文件不一致,郁闷

上面两个图片都是同一个内部节点的四个孩子的文件指针值,上面的是在写文件之前的值,下面是从文件读出来的时候的值,坑爹的是,尽然不一样?????

但是读出来的整个树,有时候是正确的,有时候是错误的,各位大神,此等错误是怎么回事儿啊?
都一个星期了,才发现是这个问题,但又不知道是怎么回事,还望各个大神指点一下!

------解决方案--------------------
对于链式存储,要保存链式结构,就要把文件当存储器使用。重建链式结构。
就是说用两个相似的数据结构。
一个在文件中,用文件指针,偏移量表示链式结构的指针。
一个在内存中,用内存地址表示指针。
存储过程就是在文件里分配空间,创建链,并取下节点的数据存储到,文件中的链式结构中。
------解决方案--------------------
内存中指针值对应内存地址。
文件中指针值对应文件偏移量。
------解决方案--------------------
内存中指针值通常可以跳着来,中间空一片或被其它内存对象占据。
文件中指针值通常都是一个挨着一个,不会浪费一大片内容谁也不用。

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……