|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.05.2009, 16:58 | #1 |
Пользователь
Регистрация: 17.05.2009
Сообщений: 15
|
Что не правильно делаю с free();
Доброго времени суток. Пишем на Microsoft Visual C++ 2008
Задача: Дано натуральное число n. Сформировать целочисленный массив IM(2n), элементами которого являются числа 1 2n 2 2n-1 3 2n-2 ... n n+1 Вот код: #include "stdafx.h" #include <stdio.h> #include <iostream> #include <stdlib.h> #include <math.h> #include <conio.h> int main() { int tr; printf ("vvedite znachenie n: "); scanf ("%d", &tr); int *A=(int *)malloc(tr*sizeof(int)); for (int i=0; i<tr; i++) { A[2*i]=i+1; printf("%d ", A[2*i]); A[2*i+1]=2*tr-i; printf("%d ", A[2*i+1]); } free(A); getch(); } Вопрос по free(A); Дело в том что при компилировании файла вылетает сообщение следующего рода: ОС Windows инициировала точку останова в 8888.exe. Это может быть вызвано повреждением кучи и указывает на ошибку в 8888.exe или в одной из загруженных им DLL. Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит 8888.exe Выведенное на экран окно содержит дополнительные данные для диагностики ошибки. Неправильно задаю массив? Или синтаксис free неправильно юзаю??? Последний раз редактировалось Winston123; 17.05.2009 в 17:12. |
17.05.2009, 17:28 | #2 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
int *A=(int *)malloc(tr*sizeof(int));
тут надо писать так: int *A=(int *)malloc(2*tr*sizeof(int)); исходя из вашего же условия задачи) |
17.05.2009, 17:28 | #3 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Это что-то студия творит... Кстати, Math и iostream вам здесь ни к чему.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
17.05.2009, 17:34 | #4 |
Пользователь
Регистрация: 17.05.2009
Сообщений: 15
|
|
17.05.2009, 17:34 | #5 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
2Sazary она у тя не всегда будет работать) возвращаемся к теме обращения на недействительный указатель
|
17.05.2009, 17:44 | #6 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
vvviperrr, ТС изменил листинг Там была строчка "razm=en*2;"
Ну а так, да, вы правы )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
08.06.2009, 21:23 | #7 |
Пользователь
Регистрация: 17.05.2009
Сообщений: 15
|
Всё та же программа, код уже претерпел изменения в соответствии с требованиями преподавателя.
/* Контрольная работа №2 Дано натуральное число n. Сформировать целочисленный массив IM(2n), элементами которого являются числа 1 2n 2 2n-1 3 2n-2 ... n n+1 */ Код:
Проблема в том, что при выводе в консольном окне, числа массива рубаются: Код:
Последний раз редактировалось Sazary; 08.06.2009 в 21:39. |
08.06.2009, 21:43 | #8 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Измените вот так:
Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
09.06.2009, 18:54 | #9 |
Пользователь
Регистрация: 17.05.2009
Сообщений: 15
|
В принципе поначалу думал то же самое, но.. если мы вводим значение скажем 9999, то элементы массива будут пятизначными - соответственно 20 чисел будут занимать больше чем одну строку... Конечно можно поставить не 20, а меньше..
Опять же если мы введём кол-во элементов скажем 15, то перенос будет слишком ранним.. В общем привязываться хочется не к количеству чисел в строке.. Есть такая идея: сталкивать числа в строку и если длина превышает 80 символов, не добавлять последнего числа, а выводить на экран строку и собирать новую C реализацией этого на языке - траблы((( |
09.06.2009, 19:02 | #10 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Вот так сделайте:
Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
подскажите пожалуйста что не правильно в скрипте. | 6AT9 | JavaScript, Ajax | 1 | 25.11.2008 00:21 |
Visual C++: Что не так делаю? | N!ckeL | Помощь студентам | 8 | 19.05.2008 11:28 |
правильно ли я делаю? | andrey4623 | Общие вопросы Delphi | 2 | 07.03.2008 20:14 |