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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 20:06   #1
Seferus
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 56
Вопрос Работа с памятью

Код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
char ch=' ';
do{ 
int a;
char *str;
int number;
printf( "Massiv's length: ");
scanf ( "%d", &number);
str = (char *) malloc(number);
if ((str = (char *) malloc(number)) == NULL)
{
   printf("Ошибка\n");      
   exit(1);                           
}
char *name ;
int number1;
printf( " Vvedite Dlinnu massiva dlya imeni:   ");
scanf ( "%d", &number1);
name = (char *) malloc(number1);
printf( " Vvedite imya faila:   ");
scanf ( "%s", name);
FILE *f; f = fopen (name, "wt");
printf( "weight, t:   ");
scanf ( "%d", &a);
if(a<=5)
printf( "\nVes gruza ne prevyshaet 5t, vam potrebuetsya Tu-134\n\n");
if(a<=5)
fprintf(f, "Tu-134");
if(a>5 && a<=30)
printf( "\nVes gruza bolshe 5t i ne prevyshaet 30t, vam potrebuetsya  Il-86\n\n");
if(a>5 && a<=30)
fprintf(f,"Il 86" );
if(a>30 && a<=45)
printf( "\nVes gruza bolshe 30t i ne prevyshaet 45t, vam potrebuetsya Ruslan\n\n");
if(a>30 && a<=45)
fprintf(f,"Ruslan" );
if(a>45)
printf( "\nVes gruza prevyshaet 45t, my ne v silah vam pomoch\n\n");
fclose(f);
f = fopen (name, "rt");
fgets(str,30,f);
printf("\n",str);
free(str);
free(name);
cout<<"\n\nChoose: Press [e] to exit or [r] to repeat "; 
ch=getch();
cout<<"\n";
}
	while (ch!='e');	
		getch();
		return 0;
}

cкажите пож где тут ошибка и как сократить кол-во строк?
Seferus вне форума Ответить с цитированием
Старый 27.12.2010, 20:26   #2
Seferus
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 56
По умолчанию

тут в памяти мусор остаётся но как его убрать я хз
Seferus вне форума Ответить с цитированием
Старый 27.12.2010, 20:28   #3
Seferus
Пользователь
 
Регистрация: 18.09.2010
Сообщений: 56
По умолчанию

free (str) особождение памяти?
но блин препод сказал что не так прога написана

Последний раз редактировалось Seferus; 27.12.2010 в 21:03.
Seferus вне форума Ответить с цитированием
Старый 28.12.2010, 04:22   #4
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Цитата:
printf( "Massiv's length: ");
scanf ( "%d", &number);
//str = (char *) malloc(number);
if ((str = (char *) malloc(number)) == NULL)
{
printf("Ошибка\n");
exit(1);
}
char *name ;
наверное он на str = (char *) malloc(number); ругался, так как ты выделяешь память и в слудущей строчке в IF-е снова выделаешь память присваивая указателю,, не очищая пердыдущий блок
Guy вне форума Ответить с цитированием
Старый 28.12.2010, 14:04   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Код:
if(a<=5)
printf( "\nVes gruza ne prevyshaet 5t, vam potrebuetsya Tu-134\n\n");
if(a<=5)
fprintf(f, "Tu-134");
Зачем два раза проверять одно и то же условие подряд?
Код:
if(a<=5) {
    printf( "\nVes gruza ne prevyshaet 5t, vam potrebuetsya Tu-134\n\n");
    fprintf(f, "Tu-134");
}
И в остальных также
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с памятью GrihaI Общие вопросы C/C++ 0 14.05.2010 18:18
Работа с памятью getUp Общие вопросы C/C++ 6 19.01.2010 01:11
С# работа с памятью Anton07 Помощь студентам 0 13.12.2009 23:06
Работа с памятью. nazavrik Общие вопросы C/C++ 0 07.10.2009 23:17
Работа с памятью Shurik Hacker Общие вопросы Delphi 7 22.06.2007 20:51