- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个类似于电影信息系统的程序。我是 C++ 的初学者。
每次编译后我都会收到此错误警报消息。我确信在 detructor 调用时它会出错。
我阅读了很多与此错误相关的帖子。但我还是忍不住。我还有其他类(class),但我不认为那里有错误。因为当我在析构函数中注释内容时,编译后没有任何错误。如果您需要,我会在我的项目中发布其他类的代码。
如果可以请帮帮我。感谢您的愿意和帮助。
这是我的类代码,它出错了。对不起我糟糕的英语
头文件
#pragma once
#include "Film.h"
#include <string>
using namespace std;
class Kino
{
private:
Film* aFilmy;
unsigned short int aPocetFilmov;
string aNazov;
public:
Kino(void);
~Kino(void);
void nastavNazov(string paNazov);
void pridajFilm(string paNazov);
void vypisFilmy();
Film* dajFilm(string paNazov);
string dajNazov(){ return aNazov; };
};
CPP 文件
#include "Kino.h"
Kino::Kino(void){
aFilmy = NULL;
aPocetFilmov = 0;
}
Kino::~Kino(void){
if(aFilmy != NULL){
delete[] aFilmy;
aFilmy = NULL;
}
}
void Kino::pridajFilm(string paNazov){
Film film(paNazov);
if(aFilmy == NULL){
aFilmy = new Film[1];
aFilmy[0] = film;
aPocetFilmov++;
}else{
Film* temp = aFilmy;
aFilmy = new Film[aPocetFilmov + 1];
for(unsigned short int i = 0; i < aPocetFilmov; i++){
aFilmy[i] = temp[i];
}
aFilmy[aPocetFilmov] = film;
aPocetFilmov++;
delete [] temp;
}
}
void Kino::vypisFilmy(){
for(unsigned short int i = 0; i < aPocetFilmov; i++){
cout << "[" << i << "] - " << aFilmy[i].dajNazov() << endl;
}
}
Film *Kino::dajFilm(string paNazov){
for(unsigned short int i = 0; i < aPocetFilmov; i++){
if(aFilmy[i].dajNazov() == paNazov){
return &aFilmy[i];
}
}
return NULL;
}
Film.h - 电影
#pragma once
#include <string>
#include "Sala.h"
using namespace std;
class Film
{
private:
string aNazov;
Sala aSala;
public:
Film(string paNazov);
Film(void);
~Film(void);
string dajNazov(){ return aNazov; };
Sala* dajSalu(){ return &aSala; };
};
Film.cpp - 电影
#include "Film.h"
using namespace std;
Film::Film(string paNazov){
aNazov = paNazov;
}
Film::Film(void){
aNazov = "Neuvedeny";
}
Film::~Film(){
}
Sala.h - 这是电影院里的大厅
#pragma once
#include <string>
#include <iostream>
#include "Rad.h"
using namespace std;
class Sala
{
private:
static const int aMaxPocetRadov = 10;
Rad* aRady;
string aNazov;
public:
Sala(string paNazov);
Sala(void);
~Sala(void);
void vytvorSalu();
void nastavNazov(string paNazov){ aNazov = paNazov; };
void vypisRady();
Rad *dajRad(int paCislo);
int dajMaxPocetRadov(){ return aMaxPocetRadov; };
string dajNazov(){ return aNazov; };
};
Sala.cpp - Hall.cpp
#include "Sala.h"
Sala::Sala(string paNazov){
aNazov = paNazov;
aRady = new Rad[aMaxPocetRadov];
this->vytvorSalu();
}
Sala::Sala(void){
aNazov = "Neuvedene";
aRady = new Rad[aMaxPocetRadov];
this->vytvorSalu();
}
Sala::~Sala(){
delete [] aRady;
aRady = 0;
}
void Sala::vytvorSalu(){
for(unsigned short int i = 0; i < aMaxPocetRadov; i++)
aRady[i].nastavCisloRadu(i + 1);
}
void Sala::vypisRady(){
Rad* rad;
for(unsigned short int i = 0; i < aMaxPocetRadov; i++){
rad = this->dajRad(i+1);
if(rad != NULL){
cout << rad->toString() << endl;
}
}
}
Rad *Sala::dajRad(int paCisloRadu){
if(paCisloRadu > 0 && paCisloRadu <= aMaxPocetRadov){
return &aRady[paCisloRadu-1];
}
return NULL;
}
尽管如此,这还不是全部。如果那没有帮助,我会发布其他 3 个最后的类(class)
最好的问候拉多万来自斯洛伐克的问候
最佳答案
您的代码的一个主要问题是缺少合适的复制构造函数。要对此进行测试,请添加
Kino( const Kino& ) = delete;
到你的类(class)。这将向您显示复制的位置。为什么这是个问题?因为自动生成的默认 copy-ctor(如果你不添加类似上面的内容或真正的 copy-ctor)会将指针复制到分配的电影。但是你现在有两个实例。当 Kino
的第一个实例被删除时,它调用 delete[] aFilmy;
并且第二个实例现在有一个指向已删除内存的指针。当第二个实例被删除时,它会尝试释放内存块再次 - 这就是导致您出现问题的原因。
您应该删除复制构造函数(和赋值运算符)
Kino( const Kino& ) = delete;
void operator=( const Kino& ) = delete;
或定义它们并确保创建正确的数据拷贝。
参见 Rule of Five (以前称为三法则)。
关于C++ 调试断言失败,表达式 : _BLOCK_TYPE_IS_VALID(pHead - blockUse ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552469/
我遇到了这个问题: 调试断言失败! 文件:f:\dd\vctools\crt_bld\self_x86\crt\dbgdel.cpp 第 52 行 表达式“_BLOCK_TYPE_IS_VALID(p
我在这里查看了类似的问题,但仍然无法意识到我做错了什么。请帮忙。 我需要为大小有限的字符串类制作模板(就像在 Pascal 中一样)代码如下:http://pastebin.com/syZf3yM8
我打算写一个程序,使用虚函数做多边形计算,但是当我完成这个程序后,出现 BLOCK_TYPE_IS_VALID(pHead -> nBlockUse) 错误 // pointers to base c
首先,我将向您展示我的代码。 std::ifstream file("accounts/22816.txt"); if(file){ char *str[50]; int count=0;
我有一个错误“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”,我不知道该怎么办.. person.h #ifndef _person_H #define _person
这个问题在这里已经有了答案: What is The Rule of Three? (8 个答案) 关闭 8 年前。 我知道这是一个常见错误,所以我尝试创建一个最小示例。我认为这是因为我试图释放堆栈
我在下面代码的最后一行遇到错误“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”: pixelCoorindateAndThreePoint* tempSpace = n
这个问题在这里已经有了答案: What is the behavior of "delete" with stack objects? [duplicate] (1 个回答) 关闭 6 年前。 我是
我正在尝试修复一个非常严重的内存泄漏,但不知何故我无法在不触发此断言的情况下删除对象。 我已通过 Google 搜索了解决方案,并已阅读有关此错误的 Stackoverflow 上的问题,但我仍然无法
我一直在从事一个新项目,但遇到了一个我不知道为什么会失败的问题。 当我执行此行删除 textY 时,给我错误 _Block_Type_Is_Valid (pHead->nBlockUse)。那我做错了
我正在调用一个静态链接的 .dll,我看到了这个错误: 我编写了 .dll 和调用代码。不应发生此错误。我想知道是否有人以前遇到过它? .dll 仅包含大约 10 行代码,它只是一个测试 .dll,以
我想弄清楚为什么我的程序在运行时会失败。到目前为止,当我运行我的程序时,它对我失败了。我调试了错误,它把我带到了 dbgdel.cpp。第 32 行“_ASSERTE(_BLOCK_TYPE_IS_V
我正在编写一个类似于电影信息系统的程序。我是 C++ 的初学者。 每次编译后我都会收到此错误警报消息。我确信在 detructor 调用时它会出错。 我阅读了很多与此错误相关的帖子。但我还是忍不住。我
我不知道为什么我总是收到 _Block_Type_Is_Valid (pHead->nBlockUse) 错误。我知道这通常是因为我双重删除了一些东西但我只在代码中使用了一次删除。以下是代码。 Box
我知道有几篇关于此错误的帖子,但它们都是针对特定情况的。我正在制作一个文件拆分/连接器,它具有以下要求:-用户必须输入文件名/输入路径和输出文件夹。我用将原始文件拆分为 N 部分(用户必须输入)的基本
我现在很迷茫。我做了一个 vector 类。一切都按照我希望的方式工作,直到最后。当调用析构函数时,我收到一条错误消息:调试断言失败 BLOCK_TYPE_IS_VALID(pHead->nblock
我正在使用以下代码进行背景减除。我正在为其提供视频路径,视频运行成功但最后它给出了Debug Assertion Failed 错误。 我在 Microsoft Visual Studio 中使用以下
通过引用“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”添加参数后调试断言失败。 class Stack { private: const std::uint3
我知道这个问题在这些论坛上被评估过很多次,但大多数时候它们确实是针对特定案例的。 这是一个类(class)项目(同样使用 C++),该项目的目的是重制经典棋盘游戏 Reversi。 我辛苦编写了几个小
此错误发生在运行时,我不确定是什么原因导致的 - 代码对我来说看起来是正确的。 #include #include using namespace std; struct Room { i
我是一名优秀的程序员,十分优秀!