C++ “**.exe已停止工作”是啥原因?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ “**.exe已停止工作”是啥原因?相关的知识,希望对你有一定的参考价值。
原因是c++程序内部运行出错,导致内存读取错误。解决方法:
(1)在控制面板中卸载AMD Catalyst Install Manager,注意在卸载时选择“卸载所有组件”并在卸载完成后重启计算机。
(2)重新安装AMD显卡驱动,在安装过程中选择“自定义安装”。接下来在组件选择窗口中去掉“Accelerated Video Transcoding ”(如下图),安装完成后重启计算机即可恢复正常。 参考技术A 楼主对字符串数组的初始化不是很理解哦~
使用方式a[]="XXX"初始化数组时,其实已经为数组分配了确定的大小,楼主的代码
a[]=0执行过后,数组就已经默认只有一个字节了,因此,输入数据太多时就会造成内存溢出。当然,由于操作系统内存对齐的缘故,对32位机是以4个字节为内存单元的,也就是说,虽然只给a分配了1个字节,其实后面的3个空闲字节也是可以用的,楼主可以试一下,当输入的字符小于等于4个时,是不会报错的;一旦多于5个就会出现图中所示的情况啦~本回答被提问者采纳 参考技术B exe是可执行文件的后缀,表示这个应用出错,停止运行了。 参考技术C 1主要是写的代码有问题
2但是不是编译错误
3也不是连接错误
4是逻辑错误
5 内存的访问出错了
这个问题主要是内存溢出了,操作系统不让你使用没有非配的内存。 参考技术D 程序崩溃。
.exe 已停止工作代码块 cpp
【中文标题】.exe 已停止工作代码块 cpp【英文标题】:.exe has stopped working code blocks cpp 【发布时间】:2016-01-20 22:07:15 【问题描述】:`你好 我刚刚在代码块中编写了这段代码,在构建和运行之后,它说程序已经停止工作。我找不到我做错了什么。我不知道问题是否与我的代码有关,或者与我正在使用的编译器或其他问题有关。 请帮忙
库.h:
#ifndef LIBRARY_H
#define LIBRARY_H
#include <iostream>
#include <string>
using namespace std;
class Library
public:
struct book
string tittle;
int number;
struct book* next;
* head, *tail, *ptr;
Library();
~Library();
book* searchName(book *, string);
void addNode(book *);
book *initNode(string s, int i);
void displayNode(book *ptr) const;
void displayList(book *ptr) const;
protected:
;
#endif
库.cpp
#include "Library.h"
Library::Library() :
head(NULL), tail(NULL)
Library::~Library()
book *current, *temp;
current = head;
temp = head;
while (current != NULL)
current = current->next;
delete temp;
temp = current;
Library::book * Library::searchName(Library::book* ptr, string name)
while (name != ptr->tittle)
ptr = ptr->next;
if (ptr == NULL)
break;
return ptr;
void Library::addNode(book *newNode)
if (head == NULL)
head = newNode;
head = newNode;
tail->next = newNode;
newNode->next = NULL;
tail = newNode;
Library::book *Library::initNode(string s, int i)
book *ptr = new book;
if (ptr == NULL)
return static_cast<book *>(NULL);
else
ptr->tittle = s;
ptr->number = i;
return ptr;
void Library::displayNode(book *ptr) const
cout << ptr->number << ": " << ptr->tittle << endl;
void Library::displayList(book *ptr) const
if (!ptr)
cout << "Nothing to display" << endl;
while (ptr)
displayNode(ptr);
ptr = ptr->next;
main.cpp
#include "Library.h"
#include <iostream>
using namespace std;
int main()
Library a;
Library::book *ptrr;
ptrr = a.initNode("s1", 1);
a.addNode(ptrr);
ptrr = a.initNode("s2", 2);
a.addNode(ptrr);
a.displayList(a.head);
【问题讨论】:
缩进你的代码,然后使用调试器......你会发现错误在哪里。Library::book *Library::initNode(string s, int i)
应该是 book
构造函数。 Library
不必知道如何构建一本书。那是book'
s 的工作。
void displayList(book *ptr) const
不得不将一本书传递给displayList
似乎有点奇怪。 displayList
已经知道它的列表。当前的实现将允许用户调用a.displayList(b.head);
,以获取b
的列表,这很愚蠢。另一方面,static void displayList(book *ptr)
是有道理的。
displayNode 类似,但应该是book
的成员。 Library
没有理由知道如何打印 book
。
【参考方案1】:
当您从main
调用第一个a.addNode(ptrr)
时,它会调用tail->next = newNode;
(在Library::addNode
内),但是由于tail
是NULL
(尚未分配),它会崩溃......
现在,代码中可能还有其他问题,但这很可能是第一个导致程序停止工作的问题...
请注意,您的代码中的某些内容可能会被简化。
喜欢:
Library::book *Library::initNode(string s, int i)
book *ptr = new book;
if (ptr == NULL)
return static_cast<book *>(NULL);
else
ptr->tittle = s;
ptr->number = i;
return ptr;
可能只是:
Library::book *Library::initNode(string s, int i)
book *ptr = new book;
if (ptr != NULL)
ptr->tittle = s;
ptr->number = i;
return ptr;
还有:
void Library::addNode(book *newNode)
if (head == NULL)
head = newNode;
head = newNode;
tail->next = newNode;
newNode->next = NULL;
tail = newNode;
应该是:
void Library::addNode(book *newNode)
if ( newNode != NULL ) // just in case
if (head == NULL)
head = newNode; // one is enough
if ( tail != NULL ) // to fix your crash
tail->next = newNode;
newNode->next = NULL;
tail = newNode;
另外,看user4581301的评论,析构代码甚至没有编译......
【讨论】:
@user4581301:这是什么意思?libri *current, *temp;
不是那种可以编译的东西。 book *current, *temp;
,另一方面...
@user4581301:是的,但是,实际上,我没有解决它.....我根本没有尝试编译代码......;-)
我的意思是 book 而不是 libri ..问题是我写的是 head = newNode ,而不是 tail=newNode ..我现在工作得很好
@D.K 您还需要将 tail->next = newNode; newNode->next = NULL; tail = newNode;
移动到 else 中。如果没有 else 工作,但它是一个令人费解的混乱或指向自身的东西。以上是关于C++ “**.exe已停止工作”是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章
C++“Hello World.exe”崩溃 - “Hello World.exe 已停止工作。”在命令提示符中使用时
如何在 Windows 的发布模式下避免“program.exe 已停止工作”窗口?