User Breakpoint called from code at XXX 错误,麻烦各位大虾帮忙看一下

medaka 2009-09-04 05:22:02
请各位大虾帮忙看一下,我的错误在哪儿呢?
在执行第二次WritePFile时候就出现了这个问题。谢谢啦!

我的代码
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
double X;
double Y;
double Z;
}Point;

typedef struct
{
int NumOfPoint;
Point *pPointList;
int Flag;
}Coord;

void WritePFile(Coord CoordList)
{
FILE* fp;
int i;
Point P[10];
for (i = 0; i < CoordList.NumOfPoint; i ++)
{
P[i] = CoordList.pPointList[i];
}
fp = fopen("File", "w");
fwrite(&CoordList.NumOfPoint, sizeof(int), 1, fp);
fwrite(CoordList.pPointList, sizeof(Point) * CoordList.NumOfPoint, 1, fp);
fwrite(&CoordList.Flag, sizeof(int), 1, fp);
fclose(fp);

if (CoordList.NumOfPoint > 0)
{
free(CoordList.pPointList);
CoordList.pPointList = NULL;
}

}

int ReadPFile(Coord *CoordList)
{
FILE* fp;
Point P[10];

if ((fp = fopen("File", "r")) == NULL)
{
return -1;
}
fread(&CoordList->NumOfPoint, sizeof(int), 1, fp);
fread(P, sizeof(P), 1, fp);
fread(&CoordList->Flag, sizeof(int), 1, fp);
fclose(fp);

if (CoordList->NumOfPoint != 0)
{
CoordList->pPointList = (Point *)malloc(sizeof(Point) * CoordList->NumOfPoint);
CoordList->pPointList = P;
}
return 1;

}
int main(int argc, char* argv[])
{
Coord CoordList;
CoordList.NumOfPoint = 1;
CoordList.pPointList = (Point *)malloc(sizeof(Point) * CoordList.NumOfPoint);
CoordList.pPointList[0].X = 1;
CoordList.pPointList[0].Y = 2;
CoordList.pPointList[0].Z = 3;
CoordList.Flag = 1;

WritePFile(CoordList);

ReadPFile(&CoordList);
CoordList.Flag = 2;
WritePFile(CoordList);

return 0;
}
...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
medaka 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 inwivled 的回复:]
C/C++ codeint ReadPFile(Coord*CoordList)
{
FILE* fp;
Point P[10];if ((fp= fopen("File","r"))== NULL)
{return-1;
}
fread(&CoordList->NumOfPoint,sizeof(int),1, fp);
fread(P,sizeof(P),¡­
[/Quote]

多谢大哥!问题解决了!
  • 打赏
  • 举报
回复
InwIvled 2009-09-04
  • 打赏
  • 举报
回复

int ReadPFile(Coord *CoordList)
{
FILE* fp;
Point P[10];

if ((fp = fopen("File", "r")) == NULL)
{
return -1;
}
fread(&CoordList->NumOfPoint, sizeof(int), 1, fp);
fread(P, sizeof(P), 1, fp);
fread(&CoordList->Flag, sizeof(int), 1, fp);
fclose(fp);

if (CoordList->NumOfPoint != 0)
{
CoordList->pPointList = (Point *)malloc(sizeof(Point) * CoordList->NumOfPoint);
// 这里应该把P的内容拷贝到CoordList->pPointList指向的内存
// 否则上面分配的内存将泄漏,而且CoordList->pPointList保存的是P的地址,出了这个函数
// 就被释放了,到时候调用WritePFile时,最后释放内存会出错
CoordList->pPointList = P;
}
return 1;

}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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