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-&gt;next = newNode;(在Library::addNode 内),但是由于tailNULL(尚未分配),它会崩溃......

现在,代码中可能还有其他问题,但这很可能是第一个导致程序停止工作的问题...

请注意,您的代码中的某些内容可能会被简化。

喜欢:

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-&gt;next = newNode; newNode-&gt;next = NULL; tail = newNode; 移动到 else 中。如果没有 else 工作,但它是一个令人费解的混乱或指向自身的东西。

以上是关于C++ “**.exe已停止工作”是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章

setup.exe已停止工作是啥意思

C++“Hello World.exe”崩溃 - “Hello World.exe 已停止工作。”在命令提示符中使用时

如何在 Windows 的发布模式下避免“program.exe 已停止工作”窗口?

最近打开电脑,老是弹出说Upgrade 出错,需要关闭,是啥原因,谢谢

win7下边弹出 *exe已停止工作,这是啥回事情

VSTestHost.exe 已停止工作 - 无法运行单元测试