Передача значений через файлы в C ++ - PullRequest
3 голосов
/ 12 марта 2010

Я все еще довольно новичок в C ++, и я делаю успехи в том, чтобы мои программы не выглядели как замешательство.

Я наконец-то избавился от различных сообщений об ошибках, но сейчас происходит сбой приложения, и я понятия не имею, с чего начать. Отладчик просто выбрасывает случайное шестнадцатеричное местоположение.

Спасибо заранее.

#include <iostream>

using namespace std;

struct Value{
public:
    int Val;
}*pc;

#include "header.h"

int main () {
    cout << "Enter a value: ";
    cin >> pc->Val;
    cout << "\nYour value is " << pc->Val << ". ";
    system ("pause");
    return 0;
}

Ответы [ 5 ]

7 голосов
/ 12 марта 2010

В вашей программе pc - это не структура - это указатель на структуру (из-за *). Вы ни к чему не инициализируете - он указывает на какое-то поддельное местоположение. Итак, либо инициализируйте его в первой строке main ():

pc = new Value();

Или сделайте его без указателя, удалив *, и используйте. вместо -> для доступа к участнику по всей программе.

3 голосов
/ 12 марта 2010

Вы никогда не инициализировали 'pc'. Это неопределенное поведение.

3 голосов
/ 12 марта 2010

pc - указатель, но вы не указали правильную память для указания. У вас есть пара вариантов.

Вы можете использовать объект вместо указателя и использовать его как объект:

struct Value{
public:
    int Val;
} c;

    ...
    cin >> c.Val;
    cout << c.Val;

Вы можете сохранить указатель и указать, что он действителен. Самый простой способ - new объект и запоминание delete позже

int main()
{
    pc = new Value;

    ...

    delete pc;
}
0 голосов
/ 12 марта 2010
#include <iostream>

using namespace std;

struct Value{
public:
    int Val;
}*pc;



int main () {


    pc = new Value();

    cout << "Enter a value: ";
    cin >> pc->Val;
    cout << "\nYour value is " << pc->Val << ". ";

    delete pc;

    system ("pause");
    return 0;
}
0 голосов
/ 12 марта 2010

Переменная pc представляет собой pointer в структуре Value

Почему бы вам не назначить его первым после объявления int main(), например

pc = new Value();

По умолчанию компилятора pc = NULL;. PS. В C ++ вы должны управлять своей собственной сборкой мусора, поэтому, как только вы закончите, сделайте это:

delete pc; //It frees memory....

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...