Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Deimon
35 / 35 / 2
Регистрация: 29.08.2009
Сообщений: 178
#1

[BCC32 Error] E2015, не получается проверить указатель перед удалением - C++

04.10.2012, 16:39. Просмотров 556. Ответов 6
Метки нет (Все метки)

[BCC32 Error] Resource.cpp(43): E2015 Ambiguity between 'operator TGraphic::IStreamPersist *()' and 'operator TInterfacedPersistent::IInterface *()'

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

Что я не так делаю?

C++
1
2
3
4
5
6
7
void CMenu::UnloadResources(void)
{
  if (*pMenuPictures[0]!=NULL)
  {
    delete [] pMenuPictures;
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 16:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [BCC32 Error] E2015, не получается проверить указатель перед удалением (C++):

Ошибка [BCC32 Error] E2453 Size of the type 'int[]' is unknown or zero - C++
Функция: int multiplication(int double_matrix1,int double_matrix2, int m, int n) //тут ошибка { int i,j,k; int...

Программа с использованием функций и ошибка [BCC32 Error] File1.c(2): E2293 ) expected - C++
Нужно написать программу с использованием функцый, вроде все правильно написал но выдает ошибку " File1.c(2): E2293 ) expected" подскажите...

ошибка [BCC32 Error] windowp.cpp(201): E2235 Member function must be called or its address taken - C++
wc.lpfnWndProc = WndProc; windowp.cpp(201): E2235 Member function must be called or its address taken Full parser context ...

Выдаёт ошибку во второй сточке: [BCC32 Error] File1.cpp(40): E2089 Identifier 'addFirst' cannot have a type qualifier - C++
Подскажите пожалуйста в чем собственно может быть вопрос. Выдаёт ошибку во второй сточке: File1.cpp(40): E2089 Identifier 'addFirst'...

Напечатать заданный текст с удалением из него всех букв b, непосредственно перед которыми находится буква с - C++
Помогите пожалуйста с задачкой на С++ Напечатать заданный текст с удалением из него всех букв b, непосредственно перед которыми...

[BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)' - C++
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> #include<string.h> ...

6
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
04.10.2012, 17:57 #2
C++
1
2
if (pMenuPictures)
    delete[ ] pMenuPictures;
Без всего кода более полный ответ дать проблематично.
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
04.10.2012, 21:07 #3
Цитата Сообщение от Deimon Посмотреть сообщение
if (*pMenuPictures[0]!=NULL)
* {
* * delete [] pMenuPictures;
* }
Этот код бессмыслен. Так как операция delete сама проверяет указатель, не равен ли он нулю.
1
Deimon
35 / 35 / 2
Регистрация: 29.08.2009
Сообщений: 178
05.10.2012, 07:45  [ТС] #4
Цитата Сообщение от Toshkarik Посмотреть сообщение
Этот код бессмыслен. Так как операция delete сама проверяет указатель, не равен ли он нулю.
А почему тогда он выдает ошибку "First chance exception at $7C812AFB. Exception class EAccessViolation with message 'Access violation at address 20FF4D1F in module 'BORLNDMM.DLL'. Read of address 00000000'. Process menu.exe (3596)" ? Именно в той самой строке с delete []
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2012, 08:10 #5
Цитата Сообщение от Deimon Посмотреть сообщение
[BCC32 Error] Resource.cpp(43): E2015 Ambiguity between 'operator TGraphic::IStreamPersist *()' and 'operator TInterfacedPersistent::IInterface *()'
Тут разве речь об указателях? Неоднозначность перегруженных операторов.
1
Deimon
35 / 35 / 2
Регистрация: 29.08.2009
Сообщений: 178
05.10.2012, 08:19  [ТС] #6
Toshkarik , я почитал, и все понял что вы сказали, действительно, разницы нет. Но нужно присваивать нуль-указатель после удаления.
Но у меня вопрос примерно тот же. Вот два варианта кода:


C++
1
2
3
4
5
6
7
  
  //Вариант-1
  for (int i = 0; i < 7; i++)
  {
  delete pMenuPictures[i];
  pMenuPictures[i] = NULL;
  }
C++
1
2
3
4
5
6
7
  
  //Вариант-2
  delete [] pMenuPictures
  for (int i = 0; i < 7; i++)
  {
  pMenuPictures[i] = NULL;
  }
Весь рабочий код, чтобы было понятнее:
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
class CMenu
{
  private:
    GTB* pMenuPictures[7];
  public:
    CMenu();
    ~CMenu();
    int DrawAtBitmap(GTB* buffer, TPoint mouse_position); //код просто рисует на buffer, используя ресуры. Вызов метода закомментирован - не используется
    void LoadResources(void);
    void UnloadResources(void);
 
};
 
void CMenu::LoadResources(void)
{
  for (int i = 0; i < 7; i++)
  {
    pMenuPictures[i]= new GTB();
    pMenuPictures[i]->Transparent=true;
    pMenuPictures[i]->LoadFromFile("../Images/menu0"+IntToStr(i)+".bmp");
  }
}
 
CMenu::CMenu()
{
  LoadResources();
  UnloadResources();
  UnloadResources();//Это не ошибка, просто тест, чтобы обезопасить себя от "скрытых" подобных случаев.
  UnloadResources();
  UnloadResources();
}
CMenu::~CMenu()
{
  UnloadResources();
}
Вот вопрос, почему вариант 2 не работает, а вариант 1 работает как надо?
Размышление: Это может быть потому, что delete [] используется для удаления указателей такого рода - int* pIntPointer = new int[10]; ?

alsav22, да, вот мне и интересно как грамматически правильно надо написать то выражение. Потому что я ставил скобки по мере значимости операторов, но все равно не работает.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.10.2012, 08:29 #7
Вариант 2 неверный, потому что вы под массив указателей память не выделяли, а освобождаете. Память выделялась под каждый указатель, поэтому так и освобождать нужно, что и делается в варианте 1.
1
05.10.2012, 08:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 08:29
Привет! Вот еще темы с ответами:

Проверить правильность кода. Вылезает Error 5 error C2679: binary '<<' : no operator found which takes a right - C++
Компилятор ругается на ошибку Error 5 error C2679: binary '&lt;&lt;' : no operator found which takes a right-hand operand of type 'Kniga' ...

Ругается [BCC32 Error] Unit1.cpp(35): E2015 Ambiguity between 'fmCreate' and 'Classes::fmCreate' - C++ Builder
TFileStream* f = new TFileStream(&quot;lol.exe&quot;, fmCreate|fmOpenWrite); IdHTTP1-&gt;Get(&quot;http://************.com/files/gp9dq8zyr&quot;, fs); delete...

Проверить, используется ли файл перед удалением - C#
Пишу программу для удаления ненужных файлов из браузера (coocie). Начал с Яндекс браузера, установленного на 8.1. В общем, если браузер...

[BCC32 Error] UnitMain.cpp(3183): E2228 Too many error or warning messages - C++ Builder
Builder 2010 warning в основном такиеvoid __fastcall TFormMain::TBELearningMouseMove(TObject *Sender, TShiftState Shift, int X, int...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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