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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2011, 18:20   #1
Dodge_wow
Пользователь
 
Регистрация: 16.08.2011
Сообщений: 11
Вопрос Интересная ошибка в С++

Всем привет. Программа была написана в Visual Studio 6.
Проблема вот в чём. Написал программу которая составляет словарь текста из файла и выводит его. При компиляции ошибок нет, но при запуске вылетает ошибка

Но программа работает при пошаговом "прогоне" приложения.
В чем же дело?
Вот собственно и сам код программы (Win32 Console Application):
Код:
#include <stdio.h>
#include <windows.h>
typedef
	struct alphabet 
	{
		char word[20];
		struct alphabet *next;
	}
WWW;
void readfile(const char *file_name, char txt[])
{
	FILE *f;
	int ch = 0;
	/* пробуем открыть файл */
	if ((f = fopen(file_name, "r")) == NULL)
	{
		/* ошибка открытия файла */
		printf("Error file %s for load not open.\n", file_name);
	}
	f = fopen(file_name ,"r");
	
	for(int i = 0; ; i++) {
		ch = getc(f);
		if (ch == EOF) break;
		txt[i] = ch;
	}
	fclose(f);
}
WWW * addword(WWW *f, char word[])
{
	WWW *n, *t = f;
	/* создаем новый элемент */
	/* выделяем память под размещение нового элемента */
	n = (WWW*) malloc(sizeof(WWW*));
	if (n == NULL) return NULL;
	strcpy(n->word, word);
	/* указатель на следующий элемент равен NULL */
	n->next = NULL;
	
	if(t == NULL) {
		f = n;
		return f;
	}
	/* дойдем до конца списка */
	while (t->next != NULL) t = t->next;
	/* добавим новый элемент в список */
	t->next = n;
	return f;
}
/* вывод списка */
void viewword(WWW *b)
{
	WWW *t = b;
	for(; t != NULL; t = t->next)
	{
		printf("%s\n", t->word);
	}
}
void main (int argc, const char *argv[])
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	WWW * first = NULL;
	char text[5000];
	memset(text, 0, 5000);
	char * word = NULL;
	char seps[] = " \n,-.";
	readfile(argv[1], text);
	
	word = strtok(text, seps);
	while (word != NULL)
	{
		first = addword(first, word);
		word = strtok(NULL, seps);
	}
	viewword(first);
}

Последний раз редактировалось Dodge_wow; 25.08.2011 в 18:23. Причина: Опечатка
Dodge_wow вне форума Ответить с цитированием
Старый 26.08.2011, 23:17   #2
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

У меня на Visual C++ 2010 никаких ошибок не выводит.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 26.08.2011, 23:33   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
void main (int argc, const char *argv[])
Да ну?
Код:
int main(int argc, char* argv[])
А во-вторых, вы бы указывали, с какими параметрами командной строки вы запускаете программу. По всей видимости просто отсутствует аргумент argv[1].
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 26.08.2011 в 23:37.
Сtrl вне форума Ответить с цитированием
Старый 27.08.2011, 00:05   #4
Dodge_wow
Пользователь
 
Регистрация: 16.08.2011
Сообщений: 11
По умолчанию

Аргумент присутствует. Я перепроверил. А в качестве аргумента (argv[1]) указывается имя файла. Дело не в этом. Проблема в том что программа работает при пошаговом "проходе", а при запуске выдает ошибку!
Dodge_wow вне форума Ответить с цитированием
Старый 27.08.2011, 00:16   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Что сразу бросилось в глаза:
Код:
n = (WWW*) malloc(sizeof(WWW*));
Звёздочку нужно убрать
Код:
n = (WWW*) malloc(sizeof(WWW));
netrino вне форума Ответить с цитированием
Старый 27.08.2011, 00:25   #6
Dodge_wow
Пользователь
 
Регистрация: 16.08.2011
Сообщений: 11
По умолчанию

Глупая ошибка. Проблема решена. Благодарю. =)
Dodge_wow вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересная програмка!! ToKS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.05.2010 23:53
Интересная зачада по с++ bara Помощь студентам 7 09.03.2010 08:55
интересная задача Irisha_17_85 Помощь студентам 2 26.10.2009 19:52
Интересная задача terminadoor Помощь студентам 1 06.02.2009 20:00
интересная головоломка Vereshagina Помощь студентам 9 11.03.2008 10:16