关于fopen打开或创建文件,指针总是指向空值的问题
我做的是磁盘B+树,创建文件代码如下
Debug了几天也解决不了,不知道到底哪出问题了
int createIndexBPTree(char *FileName, char *attr)//创建B+树,并进行相应的初始化,indexBPTree是一个全局变量。
{
P_BPNode root;
indexBPTree.root = (P_BPNode)malloc(sizeof(BPNode));
memset(indexBPTree.root, 0, sizeof(BPNode));
indexBPTree.num = 1;//记录根有多少个节点
indexBPTree.start = 1;//最小的数据所在的叶节点
strcat_s(indexBPTree.name, FileName);
strcat_s(indexBPTree.name, ".");
strcat_s(indexBPTree.name, attr);
puts(indexBPTree.name);
root = indexBPTree.root;
//printf("%s\n",root);
root->size = 0;//记录这个节点有多少个关键字
root->leaf = 1;//判断是否为页节点
root->next = -1;
root->pid = 1;//记录这个节点在文件的中的编号
indexBPTree.locate = 1;//记录根节点的在文件中的标号,即 pid
//indexBPTree.fp = fopen(indexBPTree.name, "wb");
errno_t err;
err = fopen_s(&indexBPTree.fp, indexBPTree.name, "wb");
if (err != 0)
puts("FILE CREATE FAIL!!!");
else {
fwrite(&indexBPTree.num, sizeof(int), 1, indexBPTree.fp);
fwrite(&indexBPTree.locate, sizeof(int), 1, indexBPTree.fp);
writeNode(root);
fclose(indexBPTree.fp);
}
free(root);
indexBPTree.root = NULL;
return 0;
}
int initIndexBPTree(char *FileName, char *attr)//初始化BPTree,打开相应文件, fp记录;为 root分配内存可以存储一个节点的内存,并读入根节点
{
indexBPTree.root = (P_BPNode)malloc(sizeof(BPNode));
memset(indexBPTree.root, 0, sizeof(BPNode));
indexBPTree.start = 1;//最小的数据所在的叶节点
strcat_s(indexBPTree.name, FileName);
strcat_s(indexBPTree.name, ".");
strcat_s(indexBPTree.name, attr);
errno_t err;
err = fopen_s(&indexBPTree.fp, indexBPTree.name, "rb+");
if (err != 0)
puts("FILE OPEN FAIL!!!");//结果总是输出这个,很头疼
//indexBPTree.fp = fopen(indexBPTree.name, "rb+");
else {
fread(&indexBPTree.num, sizeof(int), 1, indexBPTree.fp);//没有if else的话断点在这个位置,fp是空值
fread(&indexBPTree.locate, sizeof(int), 1, indexBPTree.fp);
readNode(indexBPTree.root, indexBPTree.locate);
}
return 0;
}
望论坛大神们帮忙解决一下!
感谢!!!