我正在使用SDL在c++中制作一个游戏。我有一个main函数,它只调用run游戏函数。运行游戏函数运行游戏,并在退出时返回0。我尝试在每次调用之前和之后打印内容,seg错误应该在返回0时发生;
functioncall()
{
Loads of SDL and other stuff
SDL_Quit();
gamestatemanager.~Gamestatemanager();
return 0; // This is probably where i get the seg fault
}
我是c++的新手,最近我使用c++学习数据结构。当错误发生时,我被卡住了,我试着调试,但它仍然困扰着我。所以,这个错误是我试图实现两个操作的连接和合并,我的终端在逻辑上显示了似乎成功的结果。然而,错误将在下一秒到来。就像img:enter image description here call stack 这是我的代码。希望有人能帮我解决这个问题,谢谢! #pragma once
#include <iostream>
using namespace std;
class LinkedList;
class Node
{
private:
int data;
No
出于好奇,我试着做一些类似下面的例子,看看编译器是否给了我一个警告,而不是调用一个无穷无尽的循环,最终导致堆栈溢出。我想也许有一种不同的行为,而不仅仅是调用普通的函数或方法。但事实并非如此。有什么特别的解释吗?或者它只是作为普通的函数调用来处理,因为我是使用this操作符显式地调用基类析构函数?
示例:
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
正如在中提到的,简单地第二次调用析构函数已经是未定义的行为12.4/14(3.8)。
例如:
class Class {
public:
~Class() {}
};
// somewhere in code:
{
Class* object = new Class();
object->~Class();
delete object; // UB because at this point the destructor call is attempted again
}
在这个例子中,类的设计方式使得析构函数可以被多次调用--不会发生双重删除这样的事情。
我检查了这段代码,在函数func()结束时,基类的析构函数已经被调用了两次。我不明白为什么??谢谢。。
class base {
public:
base(){cout << "ctor of base\n";}
~base(){cout << "d-ctor of base\n";}
};
class derived: public base
{
public:
derived(){cout << "ctor of derived\n";}
~derived(){cout
如果我有以下课程:
class Small {
public:
Small();
Small(const Small &small);
~Small();
private:
int *arr;
};
和
class Big {
public:
Big();
Big(const Big &big);
~Big();
private:
char *name;
Small smallObject;
};
当我调用~Big()时,我会删除分配给name成员的动态内存,但是smallObject也使用动态内存,这是我
在C++编程语言中,有以下示例(3.2.4节)。
unique_ptr<Shape> read_shape(istream& is);
void user()
{
vector<unique_ptr<Shape>> v;
while (cin)
v.push_back(read_shape(cin));
draw_all(v);
// call draw() for each element
rotate_all(v,45);
// call rotate(45) for each e
下面的代码调用析构函数4次:
#include<iostream>
using namespace std;
class A{
public:
A(){cout<<"A"<<endl;}
~A(){cout<<"~A"<<endl;}
A f(){cout<<"F"<<endl; A b; return b;}
};
int main(){
A a,b;
b=a.f();
}
输出:
A
A
F
A
~A
~A
~A
~A
请考虑以下几点
class base{
base();
~base();
}:
class derived : public base{
};
当派生对象被析构并且派生类没有定义析构函数时,是否会自动调用基类析构函数?
否则,如果我在派生类中也有析构函数,我是否也需要显式调用基类析构函数?
class base{
base();
~base();
}:
class derived : public base{
derived();
~derived
base::~base(); //do I need this?
下面的代码是用MSVC编译的(/MSVC),并且无法用GCC/Clang编译m_ptr1和m_ptr2。
#include <memory>
struct ForwardDeclared;
class A {
public:
explicit A();
~A();
private:
std::unique_ptr<ForwardDeclared> m_ptr1 = nullptr; // not ok
std::unique_ptr<ForwardDeclared> m
我的程序不会调用基类的虚拟析构函数。我在上找到了这个方法,所以我不知道出了什么问题。能请人帮忙吗。
#include <iostream>
#include <vector>
using namespace std;
class Number{
private:
int *arr;
int n;
public:
Number(int *a, int i):
arr(a),n(i){}
virtual vector<int> operator()()=0
这是我的第一次体验,所以不要挑剔。
这是SIGSEGV问题,它只出现在类链接中。"SDL_surface *屏幕面“指针中的问题。
密码来了..。
屏幕头
class screen
{
public:
screen();
SDLclass_Window *MainWindow=NULL;
SDL_Surface *ScreenSurface=NULL; //this is the problem pointer to the struct that cause error
//Those pointer are't NULL, see below