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

Массив в функции со static указателем на него

07.10.2014, 21:51. Показов 798. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здрасти, делаю задание на указатели из книги Хортона по Вижуал С++.
Задачка: передать в функцию строку и чтобы функция запомнила строку.
Проблема в следующем: когда я пытаюсь передать в функцию строку второй раз, то возникает ошибка при попытке удалить массив внутри функции

delete[] tranzit;
сообщение типа: HEAP CORRUPTION DETECTED

Но ведь память то под него выделена в куче. Если я уберу удаление массива, то я так понимаю получу утечку памяти. Вот и вопрос: как очистить память?


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
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <Windows.h>
 
using namespace std;
 
void strtok1(char[]);
 
int wmain(int argc, char * argv[])
{
    setlocale(LC_ALL, "Ru");
    
    char str0[] = { "ku qw io" };
    char str1[] = { "re mt" };
 
     strtok1(str0);
     strtok1(str1);
        
    std::system("pause");
    
    return 0;
}
 
void ::strtok1(char str[])
{
    static  char*  tranzit = nullptr;
        
        delete[] tranzit;
                
        short count = 0;
        while (str[count] != '\0')
            count++;
        tranzit = new char[count];
        //копируем строку 
        for (short i = 0; i <= count; i++)
            tranzit[i] = str[i];
 
    return;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2014, 21:51
Ответы с готовыми решениями:

Получить определенные поля класса, работая с указателем на класс, как с указателем на массив
Мне бы хотелось узнать в чем ошибка моего кода Вот мои наработки которые не работают где я...

Работа с указателем на массив в функции (!!!)
Я написал программу по сортировке строк из файла, который на жёстком, прога отлично работает, может...

В чем разница между указателем и указателем на указатель?
int x, *p, *q; x=10; p=&amp;x; q=p; cout&lt;&lt;*q; int x, *p, **q; x=10; p=&amp;x; q=&amp;p;

Как передать массив в массив с указателем
Как передать массив в массив с указателем тоесть например массив double c в массив **а в этой...

2
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
07.10.2014, 22:20 2
Цитата Сообщение от инженер Посмотреть сообщение
tranzit = new char[count];
выделяешь count элементов
Цитата Сообщение от инженер Посмотреть сообщение
for (short i = 0; i <= count; i++)
а записываешь count+1
Цитата Сообщение от инженер Посмотреть сообщение
Если я уберу удаление массива, то я так понимаю получу утечку памяти
так и с удалением будет утечка памяти. В самый последний вызов функции будет выделена память, а удалена не будет
0
0 / 0 / 2
Регистрация: 07.02.2013
Сообщений: 17
08.10.2014, 18:37  [ТС] 3
Jewbacabra,
а ну я понял я потерял один индекс в массиве
C++
1
2
3
4
 tranzit = new char[count+1];
        //копируем строку 
        for (short i = 0; i < count; i++)
            tranzit[i] = str[i];
0
08.10.2014, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2014, 18:37
Помогаю со студенческими работами здесь

Формула в функции c указателем
Помогите решить, не могу понять, как запихнуть //Применить в функции // c = a + b // char...

Работа с указателем в функции
Доброго времени! Есть код вида: char far * pBuf; func(&amp;pBuf);

Массив с указателем
при формировании выходной строки каждый символ должен дублироваться. Например дана abc, а при...

Нужно чтобы при обращении к функции перемешивался массив и из него бралась случайная переменная
Нужно чтобы при обращении к функции перемешивался массив и из него бралась случайная переменная...

Работа с указателем из main в функции
Всем доброе утро.) Делал задание по односвязным спискам и столкнулся с проблемкой. Передаю конец...

Рекурсия с указателем на массив
с мэйна вызываю функцию в которую передаю ссылку посредством указателя на массив. потом делаю...


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

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

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