0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 8
1

Debug Assertion Failed Организация стека, string

28.12.2014, 12:20. Показов 568. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток, задание такое.
Изменить структуру записи коллекции, используя в качестве типа
хранимой информации следующие варианты (по указанию преподавателя):у меня string, пример был с int.
В результате изменения программа включается, вводится размер, строки, но при закрытии вот такая ошибка.

lab10.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <conio.h>
#include "mystack.h"
 
int main()
{
    int iRet = 0;
    fixedCapacityStackOfInt st;
    int N;
    char* item;
    bool bRun = true;
    char buf[32];
    char* cPtr = 0;
    cPtr = buf;
    printf("Enter stack capacity N =");
        scanf("%d",&N);
        stack_create(&st,N);
    while (bRun) 
    {
        printf("\nEnter data =");
        scanf("%s",&buf);
        switch (buf[0])
        { 
        case 'q':
            bRun = false;
            break;
        case '-':
            if (!stack_isEmpty(st))
            {
                item = stack_pop(&st);
                printf("%s ",item);
            }
            break;
        default:
            
            stack_push(&st, cPtr);
        }
    }
        printf("\nStack capacity N = %d size = %d\n\n",stack_size(st), stack_length(st));
        printf("\nStacks content:\n");
        while (!stack_isEmpty(st)) 
    {
        item = stack_pop(&st);
        printf("%s ",item);
    }
    stack_close(&st);
    cPtr = 0;
    _getch();
    return iRet;
}
mystack.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "mystack.h"
#include <stdlib.h>
void stack_create(fixedCapacityStackOfInt* _stack, int cap)
{
    _stack->a = (char**)calloc(cap,sizeof(char*));
    _stack->N = 0;
    _stack->size = cap;
}
int stack_length(fixedCapacityStackOfInt _stack)
{
return _stack.size;
}
 
bool stack_isEmpty(fixedCapacityStackOfInt _stack)
{
    return _stack.N == 0;
}
 
void stack_resize(fixedCapacityStackOfInt *_stack, int newSize)
{
char **temp = (char**)calloc(newSize,sizeof(char*));
for (int i=0; i<_stack->N; i++)
{
    free(_stack->a[i]);
    _stack->a[i] = 0;
 
}
free(_stack->a);
_stack->a= temp;
temp = 0;
_stack->size = newSize;
}
 
int stack_size(fixedCapacityStackOfInt _stack)
{
    return _stack.N;
}
 
void stack_push(fixedCapacityStackOfInt* _stack, char* item)
{
    int i = _stack->N;
int st_max = _stack->size;
if (i == st_max)
stack_resize(_stack,2*st_max);
_stack->a[i] = item;
_stack->N = i+1;
}
 
char* stack_pop(fixedCapacityStackOfInt* _stack)
{
    char* item = 0;
    if (_stack)
    {
        int i = _stack->N;
        int st_max = _stack->size;
        item = _stack->a[i-1];
        _stack->N = --i;
        if ((i>0)&&(i <= st_max/4))
            stack_resize(_stack,st_max/2);
    }
    return item;
}
 
void stack_close(fixedCapacityStackOfInt* _stack)
{
 char* s=0;
for (int i=0; i<_stack->N; i++)
{
    s=_stack->a[i];
    delete [] s;
    _stack->a[i] = 0;
}
    
    free(_stack->a);
    _stack->a = 0;
}
mystack.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct fixedCapacityStackOfInt
{
    char **a;
    int N;
    int size;
};
    void stack_create(fixedCapacityStackOfInt *_stack, int cap);
    bool stack_isEmpty(fixedCapacityStackOfInt _stack);
    int stack_size(fixedCapacityStackOfInt _stack);
    int stack_length(fixedCapacityStackOfInt _stack);
    void stack_resize(fixedCapacityStackOfInt *_stack, int newSize);
    void stack_push(fixedCapacityStackOfInt *_stack, char* item);
    char* stack_pop(fixedCapacityStackOfInt *_stack);
    void stack_close(fixedCapacityStackOfInt *_stack);
Миниатюры
Debug Assertion Failed Организация стека, string  
Вложения
Тип файла: rar lab10.rar (816.5 Кб, 3 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2014, 12:20
Ответы с готовыми решениями:

Debug assertion failed : string subscript out of range
Доброе время суток, просьба более опытных форумчан помочь с проблемой. Работал в MVS 2010 на XP,...

Debug Assertion Failed! Expression: string subscript out of range
Вот сегодня трудился целый день над игрой, и дошёл до момента когда начала появлятся выше...

Debug assertion failed
#include &lt;iostream&gt; using namespace std; class Employee { friend class Leader; private: char...

Debug assertion failed
Здравствуйте, ошибка выскакивает, как решить? Выскакивает при входе в конструктор класса ниже...

5
Модератор
Эксперт С++
13504 / 10755 / 6410
Регистрация: 18.12.2011
Сообщений: 28,706
28.12.2014, 12:54 2
Под адреса строк память выделили,
а кто будет выделять память под сами строки?
Цитата Сообщение от lolprogram Посмотреть сообщение
C++
1
2
3
4
5
6
void stack_create(fixedCapacityStackOfInt* _stack, int cap) 
{ 
   _stack->a = (char**)calloc(cap,sizeof(char*)); // Вот здесь
   _stack->N = 0; 
   _stack->size = cap; 
}
Например так:
C++
1
2
3
  _stack->a = (char**)calloc(cap,sizeof(char*)); 
for(i=0;i<cap;i++)
   _stack->a[i]= (char*)calloc(100,sizeof(char));
0
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 8
28.12.2014, 13:39  [ТС] 3
Изменил, но все также, эта ошибка, потом та, которая была в 1 посте...
Миниатюры
Debug Assertion Failed Организация стека, string  
0
Модератор
Эксперт С++
13504 / 10755 / 6410
Регистрация: 18.12.2011
Сообщений: 28,706
28.12.2014, 14:53 4
Цитата Сообщение от lolprogram Посмотреть сообщение
Изменил
И в других местах тоже?
И прежде, чем выделять память, надо старую удалять:
C++
1
2
3
for(i=0;i<cap;i++)
    free( _stack->a[i]); 
free( _stack->a);
0
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 8
28.12.2014, 19:56  [ТС] 5
Я понимаю, что я туплю, но где еще это нужно добавить? по отладчику проблема где-то в закрытии и удалении...
0
0 / 0 / 0
Регистрация: 28.12.2014
Сообщений: 8
10.01.2015, 14:57  [ТС] 6
неужели все так плохо?
0
10.01.2015, 14:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2015, 14:57
Помогаю со студенческими работами здесь

Debug assertion failed
Проблема при попытке релиза, дебажится при этом нормально, объясните мне, что может быть не так,...

Debug Assertion Failed!
Доброго времени суток! Не могу понять где ошибка, подскажите пожалуйста. код: #include...

Debug assertion failed
Во время отладки вылазит такая ошибка,не могу понять в чём дело

debug assertion failed
Помогите пожалуйста,пишет debug assertion failed,когда запускаю .exe, а когда компилирую в...

Debug Assertion Failed C++
Здравствуйте. Не могу понять что не так. Выдает ошибку. Помогите разобраться и подправить. ...

Debug assertion failed
Здравствуйте! Есть 2 двусвязных списка. Нужно написать метод merge который эти списки соединяет....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru