Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 22:33   #1
AnthonyToomy
 
Регистрация: 09.12.2011
Сообщений: 4
По умолчанию Debug Error! в C++

Написал программу в С++, которая проверяет семетричность матрицы относительно побочной оси. При компиляции 0 ошибок. Но после того как программа выдаёт ответ семетрична ли введённая матрица или нет, выскакивает ошибка: Debug Error! В чём дело?
Вот код:

#include "stdafx.h"
#include <iostream.h>
#include <math.h>
int main()
{
int p, i, k, e=0, l=0;
cout << "vvedite poryadok matrici ";
cin >> p;
int **mat;
mat = new int*[p-1];
for(i=0; i<p; i++)
{
mat[i] = new int[p-1];
}
for(i=0; i<p; i++)
{
for(k=0; k<p; k++)
{
cout << "vvedite element matrici " << i << ","<< k << endl;
cin >> mat[i][k];
}
}
for(i=0; i<p; i++)
{
for(k=0; k<p; k++)
{
if (mat[i][k]==mat[p-1-k][p-1-i])
e++;
else l--;
}
}
if (e==p*p)
cout <<"semetri4naya" << endl;
else cout <<"Hesemetri4naya" << endl;
for(i=0; i<p; i++)
delete []mat[i];
delete []mat;
return 0;

}
AnthonyToomy вне форума Ответить с цитированием
Старый 12.12.2011, 22:48   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Код:
mat = new int*[p-1];
for(i=0; i<p; i++)
{
mat[i] = new int[p-1];
}
Проблема здесь.
Код:
for(i=0; i<p; i++)
delete []mat[i];
А вот тут именно вылетает, при i = p-1.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 13.12.2011, 12:21   #3
AnthonyToomy
 
Регистрация: 09.12.2011
Сообщений: 4
По умолчанию

а что в этом коде не так?
AnthonyToomy вне форума Ответить с цитированием
Старый 13.12.2011, 18:03   #4
AnthonyToomy
 
Регистрация: 09.12.2011
Сообщений: 4
По умолчанию

исправьте ошибку, пожалуйста.
AnthonyToomy вне форума Ответить с цитированием
Старый 13.12.2011, 18:16   #5
AnthonyToomy
 
Регистрация: 09.12.2011
Сообщений: 4
По умолчанию

Поработал над очищением памяти массива, и оказалось ошибок там нет! Дело в return 0;, что стоит после очищения массива. Если очистить массив после возвращения функции, то ошибок нет...
AnthonyToomy вне форума Ответить с цитированием
Старый 13.12.2011, 21:17   #6
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Если вы поставите очищение памяти после return, то ничего очищаться не будет...

Допусти вы хотите выделить память для 10 элементов(p=10).
Вы должны написать int new [10]; и доступ к этому массиву будет доступен по индексам 0,1,...,9.
В вашем случае int new [10-1]; память выделили под 9 элементов (0,1,..,8)

Теперь очистка памяти:
цикл for(int i=0;i<p;i++) проходит от до 9 , а в вашем программе выделено лишь 8. И программа вылетает в том месте, где программа пытается освободить память по 9 элементу.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно удалить указатель на массив - на строке с delete вылетает Debug Error. ImmortalAlexSan Общие вопросы C/C++ 18 07.06.2011 17:49
Периодическая ошибка Run-time error -2147417848 (80010108) Automation error в файле с макросом faraviper Microsoft Office Excel 0 24.02.2011 16:23
Ищу причину ошибки: Error in loading DLL, она же Error 48. hozpraktik Microsoft Office Excel 1 19.11.2009 12:39
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/main.exe : fatal error LNK11 prefak Win Api 0 19.04.2009 16:51
Debug/DLL10.dll : fatal error LNK1136: invalid or corrupt file AHJLPeu* Общие вопросы C/C++ 2 23.10.2008 20:59