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

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

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

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

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

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

Имеется программа, при выполнении если вызывать функцию delzap или просто выполнить удаление из списка выходит такая ошибка (при вызове функции переменная fam)
Код:


Код:
#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;
puts("Удалить запись?(y/n)");
getchar();
while(getchar()!='n')
{
	{
	printf("Введите фамилию для удаления:");
	scanf("%s",&fam);
	k=l;
	while(k!=NULL)
	{
	if(!strcmp(k->surname,&fam))
	{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();
//fam=' ';
}
}

void main()

{
setlocale(LC_CTYPE, "Russian");
FILE *in;
char tmp; //для удаления
int fl,str; /*fl-флажок*/
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;}
//puts("Information!");
vivod(k);
puts("Добавить запись?(y/n)");
dobavl(k);
delzap(k);
puts("Удалить запись?(y/n)");
getchar();
while(getchar()!='n')
{
{
printf("Введите фамилию для удаления:");
scanf("%s",&tmp);
k=l;
while(k!=NULL)
{
	if(!strcmp(k->surname,&tmp))
	{
		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);}
tmp=' ';
puts("Удалить еще?(y/n)");
getchar();
}
vivod(k);
//------------------
vivod(k);
//fwrite()
fclose(in);
//tmp=' ';
getchar();
}
Файл bd:
Иван Бородин m 1986 50000 Тундра 300 5 5 5
Alex Lekomtsev m 1989 5000 Канск 100 4 3 5
Valijoa Tadjibaev m 1986 50000 Красноярск 300 2 4 4
Olga Petrova j 1970 99999 Дивногорск 500 5 5 5
nastya Kotova j 1989 15000 Москва 700 3 3 3

Последний раз редактировалось borodin76; 16.04.2012 в 04:52.
borodin76 вне форума Ответить с цитированием
Старый 16.04.2012, 09:35   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Код:
char fam;
...
scanf("%s",&fam);
Вы пытаетесь записать массив в переменную.
fam должна быть массивом
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Stack around the variable '' was corrupted. sidestep Общие вопросы C/C++ 5 10.03.2012 20:27
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