-3

プロジェクトに取り組んでいますが、example[4].m_dArray[3] を設定するたびに、プログラムがクラッシュします。example[4].m_dArray[3] に到達するまで、他のすべての変数の値を設定できます。どんな助けでも大歓迎です!

Prog1Class.h:

#include "Prog1Struct.h"
#pragma once
#include <iostream>
#include <string.h>
using namespace std;


class Prog1Class
{
private:
    Prog1Struct example[4];
public:
    Prog1Class();
    ~Prog1Class ();
    void setStructData();
    void getStructData();
    void ptrFunction();
    void refFunction();
    void printStruct();
    void printData();
};

Prog1Struct.h:

  #pragma once
#include <string.h>
struct Prog1Struct {
  int m_iVal;
  double m_dArray[4];
  char m_sLine[80];
};

Prog1Class.cpp:

#include "Prog1Class.h"
#include "Prog1Struct.h"
#include <iostream>
#include <string.h>
using namespace std;

Prog1Class::Prog1Class()
{
}
Prog1Class::~Prog1Class()
{
    delete &example[4];
}
int main()
{
    Prog1Class *aClass = new Prog1Class();
    aClass->setStructData();
    aClass->printData();
    return 0;
}
void Prog1Class::setStructData()
{
    for(int i=0;i<5;i++)
    {
    cout << "Enter an integer: ";
    cin >> example[i].m_iVal;
    for(int j=0;j<5;j++)
    {
    cout << endl << "Enter a double: ";
    cin >> example[i].m_dArray[j];
    }
    cout << endl << "Enter a string: ";
    cin.ignore(256,'\n');
    cin.getline(example[i].m_sLine, 80, '\n');
    cout << endl;
    }
}
void Prog1Class::getStructData()
{

}

void Prog1Class::printData()
{
    for(int i=0;i<5;i++)
    {
    cout << example[i].m_iVal;
    for(int j=0;j<5;j++)
    {
    cout << example[i].m_dArray[j];
    }
    cout << example[i].m_sLine;
    }
}
4

5 に答える 5

1

まず、delete &example[4];する必要がありますdelete [] example;

第二に、どこにメモリを割り当てましたexampleか?

于 2013-10-08T20:50:28.977 に答える
0
for (int i = 0; i < 5; i++)
//              ^^^^^

配列には 4 つのスペースしかないためfor、ループには終了条件が必要です。i < 4また、あなたのdeleteはずですdelete[] example;

于 2013-10-08T21:02:15.683 に答える
0

exampleオブジェクトの宣言方法を示す必要がありますか? 誤って割り当てられた、または誤って宣言された問題があると思われます。あなたsetStructureDataは表面上は何も間違っていません(配列のサイズが一致し、文字列のサイズが適切であると仮定すると、ポインターではなくchar配列ですよね?)。

于 2013-10-08T20:52:43.103 に答える