Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fanera
11 / 10 / 5
Регистрация: 05.10.2013
Сообщений: 197
#1

Как проверить валидность указателя? - C++

17.11.2013, 23:45. Просмотров 661. Ответов 12
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <conio.h>
 
#define maxline 1000
 
int main()
{
    using namespace std;
 
    // проверка вывода (запись в файл) 
 
    ofstream FILE;
    FILE.open("C:\\a.txt", ios::out);
    char p[maxline];
    int i, pos;
    for (i = 0; i < 2; i++)
        FILE << "string" << i;
    
    FILE.close();
 
    // проверка ввода (чтение из файла)
 
    ifstream FILE1;
    FILE1.open("C:\\a.txt");
    FILE1.seekg(0);
        
             if (FILE1 == NULL) // так надо проверять на ошибку открытия файла 
                      return (0);
    while (!FILE1.eof()) // так проверяется окончание файла
    {
        FILE1 >> p >> i;
        cout << p << i << endl;
    }
    FILE1.close();
    _getch();
}
if (FILE1 == NULL) - подчеркиваются == красным в VS2013 и и не компились. Закоментируем все работае праавильно..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как проверить валидность указателя? (C++):

Как проверить значение (существование) указателя? - C++
В плюсы могу слабо, если вопрос обсуждался, прошу извинить и тыкнуть носом Внимание, вопрос Есть у нас dll на c++. Инжектится она в...

Проверить валидность последовательности скобок - C++
You are given a set of round braces. Your task is to find out if the given set of braces is valid or not. Input Input contains...

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Проверить правильность реализации умного указателя - C++
? template&lt;class T&gt; class Auto_Ptr { public: Auto_Ptr(); explicit Auto_Ptr(T* alloc); virtual ~Auto_Ptr(); ...

Проверить правильность преобразования указателя - преобразование из void* - C++
Есть один абстрактний и один не абстрактний клас. В виртуальний метод передаеться указатель на void. Можно как-то проверить правильность...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zewer
1133 / 824 / 83
Регистрация: 07.01.2011
Сообщений: 6,013
17.11.2013, 23:47 #2
if (!FILE1) если так?
newbie666
Заблокирован
17.11.2013, 23:48 #3
Цитата Сообщение от Fanera Посмотреть сообщение
подчеркиваются == красным в VS2013 и и не компились.
ну ты мышку подвинь к подчёркнутым местам и посмотри что напишет студия - будет не понятно 0 сюда текст ошибки приведи
zewer
1133 / 824 / 83
Регистрация: 07.01.2011
Сообщений: 6,013
17.11.2013, 23:49 #4
Ваш код на VS2012 откомпилился норм у меня )))
newbie666
Заблокирован
17.11.2013, 23:49 #5
подключи файл windows.h для использования виндового макроса NULL
zewer
1133 / 824 / 83
Регистрация: 07.01.2011
Сообщений: 6,013
17.11.2013, 23:50 #6
На экран вывело string0string12
Fanera
11 / 10 / 5
Регистрация: 05.10.2013
Сообщений: 197
17.11.2013, 23:53  [ТС] #7
Error отсутствует оператор "==", соответствующий этим операндам
типы операндов std::ifstream == int
newbie666
Заблокирован
17.11.2013, 23:54 #8
поставь другую студию
Fanera
11 / 10 / 5
Регистрация: 05.10.2013
Сообщений: 197
17.11.2013, 23:59  [ТС] #9
Цитата Сообщение от zewer Посмотреть сообщение
На экран вывело string0string12

выводит когда эту проверку закоментишь

Добавлено через 43 секунды
Цитата Сообщение от newbie666 Посмотреть сообщение
поставь другую студию
и что из бесплатного поставить?

Добавлено через 4 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
подключи файл windows.h для использования виндового макроса NULL
не помогло, и наверное недолжно было проект CLR consol
Max Dark
шКодер самоучка
1814 / 1615 / 589
Регистрация: 09.10.2013
Сообщений: 3,622
Записей в блоге: 6
Завершенные тесты: 2
18.11.2013, 01:09 #10
вы просто немного перепутали библиотеки и типы)

при открытии сравнение с NULL надо производить если использован тип FILE* из <stdio.h>
там действительно возращается NULL в случае ошибки

но вы используете объект класса std::ifstream из <fstream>
в данном случае проверка открытия производится с помощью std::ifstream::is_open()
в вашем случае нужно так
C++
1
2
3
if(!FILE1.is_open()) {
// обработка ошибки
}
при использовании std::ifstream проверку на NULL надо производить только при динамическом создании объекта этого класса
C++
1
2
3
4
std::ifstream* f = new std::fstream;
if(f == NULL) {
///
}
но это будет уже связано с нехваткой памяти, а не с ошибкой открытия файла
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.11.2013, 01:35 #11
Цитата Сообщение от Cra3y Посмотреть сообщение
при использовании std::ifstream проверку на NULL надо производить только при динамическом создании объекта этого класса
Цитата Сообщение от Cra3y Посмотреть сообщение
std::ifstream* f = new std::fstream;
builshit. по дефолту new кидает исключение

Цитата Сообщение от Cra3y Посмотреть сообщение
при открытии сравнение с NULL надо производить если использован тип FILE* из <stdio.h>
там действительно возращается NULL в случае ошибки
но вы используете объект класса std::ifstream из <fstream>
в данном случае проверка открытия производится с помощью std::ifstream::is_open()
до С++11 можно проверять и так, ибо потоки имели оператор каста к void*

Добавлено через 1 минуту
Цитата Сообщение от Fanera Посмотреть сообщение
ofstream FILE;
имя FILE уже используется в cstdio, не исключено что он включается в твой код, назови объект как-то по-другому
newbie666
Заблокирован
18.11.2013, 08:25 #12
проверка на открытие файла делается так:
C++
1
2
3
4
if(FILE1.is_open())
{
...
}
Fanera
11 / 10 / 5
Регистрация: 05.10.2013
Сообщений: 197
18.11.2013, 11:13  [ТС] #13
Цитата Сообщение от Cra3y Посмотреть сообщение
C++
1
2
3
if(!FILE1.is_open()) {
// обработка ошибки
}
Вот так все работает. Всем спасибо.

P.S Листинги беру из книги (Б.Пахоменко C/C++ и MS Visual C++ 2010)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 11:13
Привет! Вот еще темы с ответами:

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... - C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...

Как из указателя получтлся массив? - C++
Возможно глупый вопрос,но как unsigned char *e превратился в массив? int add(CStash* s ,const void* element){ if(s-&gt;next &gt;=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.11.2013, 11:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru