Вот небольшая программка, в которой определяется класс, реализующий
динамический массив. Если закомментировать деструктор класса - все
вроде бы работает, но почему то перестает работать в других программах.
Помогите пожалуйста.
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class dynarr {
struct elem {
char *str;
elem *next;
};
elem *first;
elem *last;
int len;
public:
dynarr();
~dynarr();
void add(const char *p);
int size(){return len;};
char* get(const int num);
char* cat(const int num=0);
};
dynarr::dynarr(){
first= new elem;
first->next=first;
last=first;
len=0;
}
dynarr::~dynarr(){
elem *n;
n=first;
while (n!=last){
delete [] n->str;
delete n;
n=n->next;
}
delete [] last->str;
delete last;
}
void dynarr::add(const char *p){
elem *n;
n = new elem;
n->str=new char [strlen(p)+1];
strcat(n->str,p);
n->next=n;
last->next=n;
last=n;
if (len==0) first=n;
len++;
// printf("%s\n",n->str);
}
char* dynarr::get(const int num){
int number=num;
if (number < 0 || number > len) number=len;
elem *cur=first;
int i=0;
while(i<number){
cur=cur->next;
i++;
}
return cur->str;
}
char* dynarr::cat(const int num=0){
int number=num;
if(number <= 0 || number >len) number=len;
elem *cur=first;
int sz=1;
for (int n=0; n<number; n++){
sz+=strlen(cur->str);
cur=cur->next;
}
char *p;
p=new char [sz];
*p='\0';
cur=first;
for (int n=0; n<number; n++){
strcat(p,cur->str);
cur=cur->next;
}
return p;
}
void TEST (){
dynarr test;
test.add("line1");
test.add("line2");
test.add("line3");
test.add("line4");
test.add("line5");
printf("%s\n",test.cat());
return;
}
int main(int argc, char **argv) {
dynarr test;
test.add("12345");
test.add("67890");
test.add("12345");
printf("%s\n",test.cat());
TEST();
cout <<"входим второй раз\n";
TEST();
cout <<"входим третий раз\n";
TEST();
return 0;
}
Ответ на:
комментарий
от justme
Ответ на:
комментарий
от justme
Ответ на:
комментарий
от asd
Ответ на:
комментарий
от asd
Ответ на:
комментарий
от asd
Ответ на:
комментарий
от asd
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум C, Странная проблема с указателями в функции (2008)
- Форум pthread (2008)
- Форум А что можно было? (2013)
- Форум Ошибка в коде... (2006)
- Форум Указателей массив на разные типы данных. (2013)
- Форум Segmentation fault (2003)
- Форум Давайте поиграем (2013)
- Форум c и iconv - помогите разобраться (2008)
- Форум покритикуйте функцию (2009)
- Форум Программа из K&R вопросы по warnings, полученные от gcc (2015)