#pragma once
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
#include <string.h>
class TString
{
private:
char *inner;
int count;
public:
TString(){ count = 0; }
TString(const char *value);
~TString(){ delete inner; }
friend TString operator+(TString &arg1, TString &arg2);
};
То ли лыжи не едут, или как бороться с MS VS2005
.h
Код:
и .cpp
Код:
#include "TString.h"
TString::TString(const char *value)
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char(count + 1);
strcpy(inner, value);
}
TString::TString(const char *value)
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char(count + 1);
strcpy(inner, value);
}
где косяк, ткните носом, ибо моск уже в отключке
А чего сам VC++ пишет? Какую ошибку?
This may be due to a corruption of the heap, and indicates a bug in tstring.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information
причем выскакивает в деструкторе
В конструкторе, указатель inner не инициализируется (память не выделяется), а в деструкторе ты освобождаешь память под этот указатель! Это как?
Код:
TString::TString(const char *value)
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char(count + 1);
strcpy(inner, value);
}
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char(count + 1);
strcpy(inner, value);
}
Ошибка в инициализации! Я не знаю как ты в коде этот класс юзаешь, и как реализована перегрузка оператора +, сама функция.
Наверное delete не понимает сколько памяти освобождать, поэтому выдает ошибку! У меня такое было кода я динамический массив делал, без конкретной размерности...
Цитата:
while(*ptr++) ++count;
А этой строкой ты количество символов узнаешь? А не пробовал strlen(...) заюзать, и в качестве параметра указать указатель value?
Но в данном контексте это мимо кассы, т.к. объект создается параметризированным конструктором аля.
Код:
TString inst("blah-blah");
Память выделяется, строка копируется, при вызове деструктора - борода.
Этот класс - не реальной задачи, но я желаю разобраться в этой ситуевине.
strlen - не суть важно
Код:
delete[] inner;
Код:
TString::TString(const char *value)
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char[count + 1];
strcpy(inner, value);
}
{
count = 0;
const char *ptr = value;
while(*ptr++) ++count;
inner = new char[count + 1];
strcpy(inner, value);
}
Надо в квадратных скобках писать...
Бред конечно, но с инициализацией с [] работает. Спасибо...
Кстати, почему while(*ptr++) ++count; а не strlen(ptr) ?
() и []... торможу не по детски...