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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2020, 17:10   #1
Snoliry
Пользователь
 
Аватар для Snoliry
 
Регистрация: 04.10.2019
Сообщений: 10
Вопрос Никак не могу понять где ошибка Повреждение кучи и как ее исправить

Здравствуйте всем! При написании кода и последующем запуске постоянно выскакивает ошибка: "Необработанное исключение по адресу 0x77A1FA1D (ntdll.dll) в Проверка функций.exe: 0xC0000374: Куча была повреждена (параметры: 0x77A5B960)."
Уже все перерыл, никак не могу исправить. Писалось в vs2019 на c++. Прикреплю cpp и файлы снизу. Надеюсь на дельные советы и помощь. Заранее спасибо.

Код:
#include "pch.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <clocale>
#include <math.h>
#include <iostream>

using namespace std;
using namespace System;
using namespace System::IO;

int NC, nNC, tNC, kNC, w;

void zWwod();
void nWwod();
void tWwod();
void kWwod();


struct z
{
    int id;
    int sid;
    int idmake;
    int idmodel;
    int idtype;
    float cost;
} *shop;

struct n
{
    int id;
    char name[15];
} *nazv;

struct t
{
    int id;
    char model[20];
} *mode;

struct k
{
    int id;
    char type[20];
} *tip;

void zWwod()
{
    int i, n, k = 0;
    char s[200];
    int raz = 200;
    FILE* in;
    in = fopen("cpshopcopy.db", "r");
    NC = 0;
    while (fscanf(in, "%s", s) != EOF)
        NC++;

    fclose(in);
    in = fopen("cpshopcopy.db", "r");
    shop = (struct z*)malloc(NC * sizeof(struct z));
    while (fscanf(in, "%s", s) != EOF)
    {
        n = strlen(s);
        for (i = 0; i < n; i++)
            if (s[i] == ';')
                s[i] = ' ';
        k++;
        sscanf_s(s, "%d%d%d%d%d%f", &shop[k].id, &shop[k].sid, &shop[k].idmake,
            &shop[k].idmodel, &shop[k].idtype, &shop[k].cost);

    }
    fclose(in);
}

void nWwod()
{
    int i, n, k = 0;
    char s[80];
    int raz = 80;
    FILE* in;
    in = fopen("makecopy.db", "r");
    nNC = 0;
    while (fscanf(in, "%s", s) != EOF)
        nNC++;
    fclose(in);
    in = fopen("makecopy.db", "r");
    nazv = (struct n*)malloc(nNC * sizeof(struct n));
    while (fscanf(in, "%s", s) != EOF)
    {
        n = strlen(s);
        for (i = 0; i < n; i++)
            if (s[i] == ';')
                s[i] = ' ';
        k++;
        sscanf_s(s, "%d%s", &nazv[k].id, nazv[k].name, raz);

    }
    fclose(in);
}

void tWwod()
{
    int i, n, k = 0;
    char s[80];
    int raz = 80;
    FILE* in;
    in = fopen("modelcopy.db", "r");
    tNC = 0;
    while (fscanf(in, "%s", s) != EOF)
        tNC++;
    fclose(in);
    in = fopen("modelcopy.db", "r");
    mode = (struct t*)malloc(tNC * sizeof(struct t));
    while (fscanf(in, "%s", s) != EOF)
    {
        n = strlen(s);
        for (i = 0; i < n; i++)
            if (s[i] == ';')
                s[i] = ' ';
        k++;
        sscanf_s(s, "%d%s", &mode[k].id, mode[k].model, raz);

    }
    fclose(in);
}

void kWwod()
{
    int i, n, k = 0;
    char s[80];
    int raz = 80;
    FILE* in;
    in = fopen("typecopy.db", "r");
    kNC = 0;
    while (fscanf(in, "%s", s) != EOF)
        kNC++;
    fclose(in);
    in = fopen("typecopy.db", "r");
    tip = (struct k*)malloc(kNC * sizeof(struct k));
    while (fscanf(in, "%s", s) != EOF)
    {
        n = strlen(s);
        for (i = 0; i < n; i++)
            if (s[i] == ';')
                s[i] = ' ';
        k++;
        sscanf_s(s, "%d%s", &tip[k].id, tip[k].type, raz);

    }
    fclose(in);
}

int main()
{
    system("cls");
    int k, i;
    char s1[80], s2[80], s3[50];
    zWwod();
    nWwod();
    tWwod();
    kWwod();
    for (k = 1; k < NC+1; k++)
    {
        for (i = 1; i < nNC + 1; i++)
            if (nazv[i].id == shop[k].idmake)
                strcpy(s1, nazv[i].name);
        for (i = 1; i < tNC + 1; i++)
            if (mode[i].id == shop[k].idmodel)
                strcpy(s2, mode[i].model);
        for (i = 1; i < kNC; i++)
            if (tip[i].id == shop[k].idtype)
                strcpy(s3, tip[i].type);
        printf(" %d %d %s %s %s %f \n", shop[k].id, shop[k].sid, s1, s2, s3, shop[k].cost);

    }
    _getch();

}

Файлы.rar
=================================== ===
Еще раз благодарю за помощь ^_^
Snoliry вне форума Ответить с цитированием
Старый 09.07.2020, 18:08   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

На первый взгляд проблема в том, что выделяется, например, память под NC структур (с индексами от 0 до NC-1), а записываются данные по индексам от 1 до NC. Из-за этого происходит постоянное "вылезание" из выделенной памяти. И в main функции циклы тоже вылезают за границы массивов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.07.2020, 19:22   #3
Snoliry
Пользователь
 
Аватар для Snoliry
 
Регистрация: 04.10.2019
Сообщений: 10
По умолчанию

Я тоже так думал, но что так, что так. Все равно вылезает ошибка кучи. Даже если я сделаю
Код:
for (i = 0; i < nNC; i++)
И тому подобное
Snoliry вне форума Ответить с цитированием
Старый 09.07.2020, 20:11   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

У меня не падает, если поправить заполнение (k++ после sscanf_s) и поправить индексы в циклах.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.07.2020, 20:17   #5
Snoliry
Пользователь
 
Аватар для Snoliry
 
Регистрация: 04.10.2019
Сообщений: 10
По умолчанию

Какие именно вы индексы меняли?
Продолжает вылетать...

Да, действительно продолжает не работать

Последний раз редактировалось BDA; 09.07.2020 в 20:32.
Snoliry вне форума Ответить с цитированием
Старый 09.07.2020, 20:31   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
void zWwod()
{
...
        sscanf_s(s, "%d%d%d%d%d%f", &shop[k].id, &shop[k].sid, &shop[k].idmake,
            &shop[k].idmodel, &shop[k].idtype, &shop[k].cost);
        k++;
...
}

void nWwod()
{
...
        sscanf_s(s, "%d%s", &nazv[k].id, nazv[k].name, raz);
        k++;
...
}

void tWwod()
{
...
        sscanf_s(s, "%d%s", &mode[k].id, mode[k].model, raz);
        k++;
...
}

void kWwod()
{
...
        sscanf_s(s, "%d%s", &tip[k].id, tip[k].type, raz);
        k++;
...
}
...
int main()
{
...
    for (k = 0; k < NC; k++)
    {
        for (i = 0; i < nNC; i++)
            if (nazv[i].id == shop[k].idmake)
                strcpy(s1, nazv[i].name);
        for (i = 0; i < tNC; i++)
            if (mode[i].id == shop[k].idmodel)
                strcpy(s2, mode[i].model);
        for (i = 0; i < kNC; i++)
            if (tip[i].id == shop[k].idtype)
                strcpy(s3, tip[i].type);
        printf(" %d %d %s %s %s %f \n", shop[k].id, shop[k].sid, s1, s2, s3, shop[k].cost);
    }
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.07.2020, 20:42   #7
Snoliry
Пользователь
 
Аватар для Snoliry
 
Регистрация: 04.10.2019
Сообщений: 10
По умолчанию

Один в один, но вылетает. Похоже проблема на моей стороне. Спасибо за помощь ^_^
Snoliry вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CSS связь с html никак понять не могу. GeorgDeckers HTML и CSS 6 31.08.2018 07:41
с++: компилятор пишет что в 11 строке ошибка, я не могу понять как ее исправить Fox1234 Помощь студентам 2 23.05.2015 14:08
В чём ошибка..никак не могу понять Лися Общие вопросы по Java, Java SE, Kotlin 1 16.10.2011 00:50
Векторы, никак не могу понять YourLastSong Общие вопросы C/C++ 6 26.12.2010 18:00
Повреждение кучи fosder Помощь студентам 0 08.12.2010 01:36