LINUX.ORG.RU

debug простенького приложения (С++)


0

0

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

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <string>
#include <fstream>
using namespace std;
#define NUMBER_OF_DIGITS 16
void _uitoa(unsigned int value, char* string, unsigned char radix)
{
unsigned char index, i;
  index = NUMBER_OF_DIGITS;
  i = 0;
  do {
    string[--index] = '0' + (value % radix);
    if ( string[index] > '9') string[index] += 'A' - '9' - 1;
    value /= radix;
  } while (value != 0);
  do {
    string[i++] = string[index++];
  } while ( index < NUMBER_OF_DIGITS );
  string[i] = 0;
}
void _itoa(int value, char* string, unsigned char radix)
{
  if (value < 0 && radix == 10) {
    *string++ = '-';
    value = -value;
  }
  _uitoa(value, string, radix);
}
struct mobil
{
	char proizvoditel[50];
	char model[50];
	char color[50];
	 int polifoni; 
	int camera;            
};
int main(int argc, char* argv[])
{
	fstream file;
	file.open("./out",ios::out);
	const int col=5;
	mobil mag_mobil[col];
	mobil *m;
	if(file.is_open())
	{
	for(m=mag_mobil;m<mag_mobil+col;m++)
         {
	cout << "Введите производителя\n";
	cin >> m -> proizvoditel;
	file.write(m->proizvoditel,50);
	cout << "\nВведите модель\n";
	cin >> m -> model;
	file.write(m->model,50);
	cout << "\nВведите цвет\n";
	cin >> m -> color;
	file.write(m->color,50);
	cout << "\nНаличие полифонии (1 - да; 2 - нет\n";
		cin >> m -> polifoni;
		char buf;
		_itoa(m->polifoni,&buf,10);
		file.write(&buf,1);
		cout << "\nЕсть ли в наличии фото камера(1-yes or 0-no)\n";
		cin >> m -> camera;
		_itoa(m->camera,&buf,10);
		file.write(&buf,1);
	}
	file.close();
	}
cout<<"\nВведите 1 чтобы вывести информацию о телефонах с камерой или 0 чтобы выйти\n";
int s;
cin>>s;
	switch(s)
	{
	case(1):
	file.open("./in",ios::in);
	if(file.is_open())
	{
	char c, temp[10];
	int fsort, fnal;
	for(m=mag_mobil;m<mag_mobil+col;m++)
	{
		file.seekg(100,ios::cur);
		file>>c;
		fsort=atoi(&c);
			if(fsort==s&&fnal==1)
			{
			file.seekg(-22,ios::cur);
			long t1=file.tellg();
			file.read(temp,10);
			cout<<temp<<"\t";
			long t2=file.tellg();
			file.seekg((10-(t2-t1)),ios::cur);
			t1=file.tellg();
			file.read(temp,10);
			cout<<temp<<"\n";
			t2=file.tellg();
			file.seekg((10-(t2-t1)+2),ios::cur);
			}
	}
	file.close();
	}
case(0):
break;
}
return 0;
}
Компилится нормально но при выполнении выдается ошибка сигментирования, как мне кажется проблема кроется в функции перевода целого типа в символьный,но как исправить незнаю. Помогите плз.

valgrind

Имхо для таких задач лучше подходит python/ruby/php/etc. Заодно к вебу можно прикрутить будет.

true_admin ★★★★★
()

[code] cin >> m -> polifoni; char buf; _itoa(m->polifoni,&buf,10); file.write(&buf,1); [/code] Чё это? Зачем это? Что мешает писать в файл число как есть? И если уж хочется хранить числа как строки, то почему не использовать стандартные средства?

legolegs ★★★★★
()

gdb в руки и info stack после сегфолта

lester_dev ★★★★★
()
Ответ на: комментарий от shmel210

так полезнее будет

кому?

Я просто попросил помощи в решении проблемы

man gdb

jtootf ★★★★★
()

Наговнокодил и просишь нас разобраться? Научись пользоваться отладчиком неуч!

anonymous
()
Ответ на: комментарий от anonymous

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

shmel210
() автор топика
Ответ на: комментарий от shmel210

Не осилил gdb? Используй графический фронтенд к нему, например, insight.

anonymous
()

По твоему коду буфер для _uitoa() должен вмещать NUMBER_OF_DIGITS, а здесь у тебя буфер всего на 1 символ:

   char buf;    _itoa(m->polifoni,&buf,10);

А отладчик тебя не спасет - он вообще не нужен. Головой надо думать!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.