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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 20:39   #1
borodin76
Новичок
Джуниор
 
Регистрация: 30.06.2010
Сообщений: 2
По умолчанию Опять все таже ошибка: Run-Time Check Failure #2 - Stack around the variable 'fam' was corrupted.

Так и не пойму как сделать чтоб при выходе из функции delzap не вылетала эта ошибка. С динамическими списками туго у меня
Код:

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <fstream>
#include <locale.h>
struct db 
{   char surname[10];//фамилия
	char name[9];//имя
	char pol;//пол
	int god;//год рождения
	int nstud;//номер студенческого
	int grup;//Группа
	int matem;//математика
	int fizika;//физика
	int prog;//программирование
	char gorod[10];//город
	db *link;};
db *k,*l,*r,*q,*q1;/*l и r указатели на начало и конец нашего списка, k, q и q1 рабочие 
				   указатели необходимые для чего угодно(в нашем случае для сортировки)*/
void sort(db *k)
{if(k==l)
			{q=k->link;
			 k->link=q->link;
			 l=q;
			 q->link=k;
			 q=k->link;}/*эта часть если меняем начальный и второй элементы*/
 else 
			{q1=l;
			while(q1->link!=k)
				q1=q1->link;
			k->link=q->link;
			q1->link=q;
			q->link=k;/*а эта если меняем в середине или в конце списка*/
			q=k->link;
			if(k==r)
				r=q;}}
void vivod(db *k) 
{
puts("    Имя    Фамилия  Пол Год р. №студ.б. Откуда   Группа Математ Физика Прогр-е");
puts("   ----------------------------------------------------------------------------");
k=l;
while(k!=NULL)
{printf("%9s %10s %1c %4d %6d %11s %2d %6d %6d %6d \n",k->name,k->surname,k->pol,
		k->god,k->nstud,k->gorod,k->grup,k->matem,k->fizika,k->prog);k=k->link;}}
void dobavl(db *k)
{
	while(getchar()!='n')
	{
	puts("Введите запись:");
	db *dbnew;
	dbnew=new db;
	dbnew->link=NULL;
	printf("Имя ");
	scanf("%s",&dbnew->name);
	printf("Фамилия ");
	scanf("%s",&dbnew->surname);
	printf("Пол ");
	scanf("%s",&dbnew->pol);
	printf("Год рождения ");
	scanf("%d",&dbnew->god);
	printf("№ студ билета ");
	scanf("%d",&dbnew->grup);
	printf("Откуда прибыл ");
	scanf("%s",&dbnew->gorod);
	printf("Группа ");
	scanf("%d",&dbnew->grup);
	printf("Оценка по математике ");
	scanf("%d",&dbnew->matem);
	printf("Оценка по физике ");
	scanf("%d",&dbnew->fizika);
	printf("Оценка по программированию ");
	scanf("%d",&dbnew->prog);
	r->link=dbnew;
	r=dbnew;
	puts("Добавить еще?(y/n)");
	getchar();}
}
void delzap(db *k)
{
char fam[10]="         ";
puts("Удалить запись?(y/n)");
getchar();
while(getchar()!='n')
{
	{
	printf("Введите фамилию для удаления:");
	scanf("%s",&fam[10]);
	k=l;
	while(k!=NULL)
	{
	if(!strcmp(k->surname,&fam[10]))
	{if(k==l)
		{l=l->link;
		delete k;}
		else
		{
		q=l;
		while(q->link!=k)          
			q=q->link;
		q->link=k->link;
		if(r==k)
			r=q;
		delete k;
		}
	break;
	}
	k=k->link;
	}
vivod(k);
	}
puts("Удалить еще?(y/n)");
getchar();
}
}
void main()

{
setlocale(LC_CTYPE, "Russian");
FILE *in;
if((in=fopen("bd.txt","r"))!=NULL)	k=new db;
	fscanf(in,"%s",&k->name);
	fscanf(in,"%s",&k->surname);
	fscanf(in,"%s",&k->pol);
	fscanf(in,"%d",&k->god);
	fscanf(in,"%d",&k->grup);
	fscanf(in,"%s",&k->gorod);
	fscanf(in,"%d",&k->grup);
	fscanf(in,"%d",&k->matem);
	fscanf(in,"%d",&k->fizika);
	fscanf(in,"%d\n",&k->prog);/*все читаем из тестового файла bd.txt*/
	k->link=NULL;
	l=r=k;
	while(!feof(in))
	{ k=new db;
	fscanf(in,"%s%s%s%d%d%s%d%d%d%d%d\n",k->name,k->surname,&k->pol,&k->god,
		&k->grup,k->gorod,&k->grup,&k->matem,&k->fizika,&k->prog);
	k->link=NULL;
	r->link=k;
	r=k;}
vivod(k);
puts("Добавить запись?(y/n)");
dobavl(k);
vivod(k);
delzap(k);
vivod(k);
//fsort(k);
fclose(in);
getchar();
}
borodin76 вне форума Ответить с цитированием
Старый 18.04.2012, 17:50   #2
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
По умолчанию

Добрый день.
Попробуйте вместо
Код:
scanf("%s",&fam[10]);
Код:
scanf("%s",fam);
Код не очень хорош(((
Код:
strcmp(k->surname,&fam[10])
Потенциальная ошибка с терминирующим нулем /0
Используйте strcpy_s для избежания подобных ошибок
либо
Код:
strncmp(k->surname,&fam,9)
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883

Последний раз редактировалось Karmadon; 18.04.2012 в 18:02.
Karmadon вне форума Ответить с цитированием
Старый 18.04.2012, 18:11   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

borodin76

судя по большому количеству однобуквенных указателей и общему оформлению кода в ужоснах-стиле, скорее всего испорчена память.
Не используй для программирования Нотепад, в нем нет возможности отладки. Возьми среду программирования с отладчиком, например Code::Blocks или Visual Studio, потом гоогле "как отлаживать приложения"
Rififi вне форума Ответить с цитированием
Старый 18.04.2012, 18:15   #4
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
borodin76

судя по большому количеству однобуквенных указателей и общему оформлению кода в ужоснах-стиле, скорее всего испорчена память.
Не используй для программирования Нотепад, в нем нет возможности отладки. Возьми среду программирования с отладчиком, например Code::Blocks или Visual Studio, потом гоогле "как отлаживать приложения"
Он вроде и использует VS, но видать не спасло
А вот код приятно форматировать можно всего несколькими кнопочками
Ctrl+A, Ctrl+K, Ctrl+D
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883
Karmadon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Run-Time Check Failure #2 - Stack around the variable 'tmp' was corrupted. borodin76 Общие вопросы C/C++ 1 16.04.2012 09:35
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. Gidross Общие вопросы C/C++ 9 28.12.2010 15:22
Run-Time Check Failure #3 Xe[N]o Общие вопросы C/C++ 2 27.11.2010 09:01
un-time check failure #2-stack around the variable 't' was corrupted Despar Помощь студентам 1 13.05.2010 10:17
run-time check failure #2-stack around the variable 't' was corrupted Despar Общие вопросы C/C++ 1 13.05.2010 08:33