| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1234 人关注过本帖
标题:[求助]这又是个什么错误?
只看楼主 加入收藏
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
 问题点数:0 回复次数:10 
[求助]这又是个什么错误?
运行过程中都没有问题,当调用了某一个函数后再退出程序的时候就报这个错误,这是什么错误哦?有哪些情况会造成这种错误?
(这几天老是遇到这种感觉莫名其妙的错误,哎!~)

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2006-5-10 2:15:40编辑过]

搜索更多相关主题的帖子: 函数 感觉 运行 
2006-05-10 02:13
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
在dbgdel.cpp的第47行被Assert了,选重试,看看pHead->nBlockUse是什么不合法的数值。

http://myajax95./
2006-05-10 08:10
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 

重试后就弹出发送错误报告的对话框了啊,怎么回事啊?

学生管理(单链表).exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。

2006-05-10 13:56
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
指针错误
能不能拿代码啊?

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-05-10 14:00
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 
应该是调用了这个函数就要出这个错!

void List::Find()//查找函数
{
int a;student Fdstu;ListNode *p;
p=new ListNode();
do//循环查找
{
int flag=0; p=first->link;
cout<<"\n";
cout<<"***************************************************************"<<endl;
cout<<" 1. 按编号查找"<<endl;
cout<<" 2. 按学号查找"<<endl;
cout<<" 3. 按名字查找"<<endl;
cout<<" 4. 按住址查找"<<endl;
cout<<" 5. 按出生年月日查找"<<endl;
cout<<" 6. 按平均成绩查找"<<endl;
cout<<" 7. 结束查找"<<endl;
cout<<"***************************************************************"<<endl;
cout<<"\n";
cout<<"你要按什么查找?请在1-7中输入对应的数字:";
cin>>a;

switch(a){

case 1: cout<<"请输入编号:";//按编号查找
cin>>Fdstu.Num;
do
{
if(p->data.Num==Fdstu.Num)
{
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 2: cout<<"请输入学号:";//按学号查找
cin>>Fdstu.ID;
do
{
if(p->data.ID==Fdstu.ID){
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 3: cout<<"请输入名字:";//按名字查找
cin>>Fdstu.Name;
do
{
if(strcmp(p->data.Name,Fdstu.Name)==0)
{
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 4: cout<<"请输入住址:";//按住址查找
cin>>Fdstu.Place;
do
{
if(strcmp(p->data.Place,Fdstu.Place)==0)
{
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 5: cout<<"请输入出生年月日(比如1986.01.01):";//按出生年月日查找
cin>>Fdstu.Date;
do
{
if(strcmp(p->data.Date,Fdstu.Date)==0)
{
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 6: cout<<"请输入平均成绩:";//按平均成绩查找
cin>>Fdstu.Score;
do
{
if(p->data.Score==Fdstu.Score)
{
cout<<p->data;
flag=1;
}
p=p->link;
}while(p!=NULL);
if(!flag) cout<<"未找到!"<<endl; break;

case 7: cout<<"查找已结束"<<endl; break;//结束查找

default: cout<<"输入错误!";
}
}while(a!=7);//当a等于7时结束循环
delete p;
}
2006-05-10 15:00
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 

这是类的定义:

struct student//定义学生结构
{
int Num;
long ID;
char Name[10];
char Place[100];
char Date[20];
float Score;
};

class List;//List类的前视声明

class ListNode//定义链表结点类
{
friend class List;
private:
student data;//学生类型的数据
ListNode *link;
public:
ListNode();//不给数据的构造函数
ListNode(const student &item);//给数据的构造函数
ListNode *NextNode() { return link; }//给出当前结点的下一个结点的地址
ListNode *InsertAfter(ListNode *p);//当前结点插入
ListNode *GetNode(const student &item,ListNode *next);//建立一个新结点(返回的是新结点的地址值)
};

class List
{
private:
ListNode *first,*last;
public:
List(const student &value)//构造函数
{ last=new ListNode(value); first=new ListNode(); first->link=last; }
~List();//析构函数
void MakeEmpty(); //将链表置空
void Getdata();//输入数据
int Length() const;//求链表长度
//ListNode *FindValue(student value);//在链表中搜索含数据value的结点
ListNode *FindI(int i);//搜索链表中第i个元素的地址
int Insert(student value,int i,int flag);//在第i个结点位置处插入value
student *Remove(int i);//删除第i个结点
void Output();//显示数据
void Find();//查找
//void Renew(int i);//更新数据
void Total();//统计
//int OutFile();//写文件
//int InFile();//读文件
friend ostream &operator<<(ostream &out,student &inList);//重载运算符<<
friend istream &operator>>(istream &in,student &inList);//重载运算符>>
};

2006-05-10 15:05
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
VC debug的常用操作,选终止或重试,直到所有message box都被干掉,光标停在出错的那一行,是一个系统的Assert,在VC call stack 的combo box里找他的几级caller function。直到找到你自己写的那个函数,把鼠标放在出错的那一行或者前面几行看看变量们。九成是个空指针或者没有Create就init control职类的错误。

http://myajax95./
2006-05-10 15:22
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 

没懂everajax斑竹的意思
怎么搞哦~

2006-05-10 15:33
w5941120
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-4-16
收藏
得分:0 
我已经改了,就不应该动态分配内存~
2006-05-10 19:20
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 

说说怎么debug吧,程序不是所有错都需要检查出来的。你的开发环境会帮你找出很多错误。这里举个简单的例子,把下面的程序在VC下编译并运行(用debug模式运行,即F5)。

#include "stdafx.h"
#include <string>
#include <crtdbg.h>
using namespace std;

int crash(string *p);

int main(int argc, char* argv[])
{
string *pstr = NULL;

crash(pstr);

return 0;
}

int crash(string *p)
{
_ASSERT(p != NULL);
return p->size();
}

执行的时候会出现

图片附件: 游客没有浏览图片的权限,请 登录注册

选Retry,光标会停在出错的位置。
图片附件: 游客没有浏览图片的权限,请 登录注册

这和你的程序的意思查不多,假设main()是你写的,而crash()是系统的函数,这个函数应该返回caller所要查的string的大小,但为了保证string *p不是空,于是函数里加了保护_ASSERT(p != NULL),这样一旦NULL pointer被用到,程序自己终结,避免了对系统的损失。(只在debug模式下起作用)
对你的情况ASSERT出现在VC自己的程序中,不是你写的,所以看不出什么。于是作下面的操作。
图片附件: 游客没有浏览图片的权限,请 登录注册

选context的combo box,里面显示了每个函数是怎么被call的。你会发现是main()函数call了crash()。因为main()是你写的,所以选main().

图片附件: 游客没有浏览图片的权限,请 登录注册

绿色的光标跳到了main()出错的那一行,把鼠标放在每个变量上看一看,于是发现这时候pstr 是空0x0000。说明你的main()函数call 不对,于是就知道怎么改了。

[此贴子已经被作者于2006-5-11 3:20:56编辑过]


http://myajax95./
2006-05-11 03:20
快速回复:[求助]这又是个什么错误?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017133 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved