2017-12-03 107 views
-3

每当我运行构造函数钱的注释部分程序崩溃。 当我编译它时,它也不会抛出任何错误。 有人能告诉我发生了什么事吗?每当我运行注释代码时程序崩溃

另外我想在这里实现自动售货机的问题。 我已经删除了一些正常工作的代码部分。

#include <iostream> 
using namespace std; 
class money 
{ 
    public : 

    int *max; 
    int *accepted_values = new int[10]; 
    bool present; 
    int *deposited; 
    int i; 
    money() 
     { 
     } 
    money(int *a, int how_many) 
     { 
      //*max = how_many; 
      // for (i=0; i<how_many; i++) 
      //  { 
      //   accepted_values[i] = a[i]; 
      //  } 
      //*deposited = 0; 
      present = false;     
     } 
}; 

class Vending_machine 
{ 
    public : 

    money *coins = new money(accepted_coins, 5); 
    //money *coins = new money(); 

    int *amount_deposited = new int; 

    Vending_machine() 
    { 
     cout<<"Cool"; 
    } 
    ~Vending_machine() 
     { 
      delete amount_deposited; 
     } 
}; 

int main() 
{ 
    Vending_machine a; 
} 
+2

['using namespace std ;' is bad practice](https://stackoverflow.com/q/1452721/2176813),请勿使用它。 – tambre

+1

无法用GCC 6.3重现。请告诉我们您的编译器和编译器版本。也就是说,如果你的编译器遇到一个ICE,我们可以做的事情就不多了,除了推荐你更新你的编译器,或者通过适当的渠道将它作为一个错误进行存档。 – tambre

+1

显示它如何崩溃。发布编译器错误消息会很有帮助。 – ks1322

回答

0

您提领该INT指针在构造函数int *maxint *deposited,不先分配适当的内存地址。

由于它是未定义的行为,它总是会崩溃。

int* myPointer; 
*myPointer = 10; // crashes 

指针总是先指向一个有效地址,然后才能使用它。 这可能是另一个变量的地址:

int myInt; 
int *myPointer = &myInt; 
*myPointer = 10; // doesn't crash - myInt now is 10. 

,或者它可以动态分配和释放。

int* myPointer = new int; 

但是在这种情况下,您必须注意一旦完成后释放内存。

delete myPointer; 

更好的解决方案是使用std::unique_ptr<>,这需要解除对破坏其指针的照顾。

但是最好的解决方案是根本不使用指针,如果它们不是真的需要的话 - 尤其是如果你不知道指针如何工作的话。我假设你可以完全避免使用指针。

+0

您能否显示一个避免指针的快速示例? –

+0

@ user2328447谢谢,我刚刚意识到我忘了声明使用新的int。 新的C++编程。 –

+0

当然:)我记得这个我自己...指针并不是一个真正的初学者的主题,虽然很多初学者尝试使用它们并失败(包括我;) – user2328447

相关问题