Seite 1 von 1

left&right nachbau mit unvorhergesehener Ausgabe

Verfasst: Di Nov 19, 2013 8:57 pm
von darksider3
Hallo,
Direkt mal zum Problem: Ich hab zwei Funktionen, die auf meine "eigene" String-Klasse ausgerichtet sind: left und right.(C++)

Dabei möchte ich einfach den String "Hello World" mit den beiden Funktionen manipulieren(soll genauso arbeiten wie die Funktionen von iostream)..
Sprich: String holen, bearbeiten und neues Objekt der Klasse erzeugen und zurückgeben.
Dabei krieg ich meist allerdings nur "unlesbares"(Ab dem Abschnitt, wo ich str.left bzw. right aufrufe): �_����

Soweit so gut..

Code: Alles auswählen

#include <iostream>
int mystrlen(char const *str)
{
  int x=0;
  for(; str[x] != '\0';x++)
  {
    //Do nothing.
  }
  return x;
}
class darkstring
{
  friend darkstring & operator +=( darkstring & lhs, char const* rhs );
  friend darkstring  operator +( darkstring const & lhs, char const* rhs );
  friend darkstring  operator +( darkstring const & lhs, darkstring const & rhs );
  friend darkstring  operator +( char const * lhs, darkstring const & rhs );
  friend std::ostream & operator <<( std::ostream &  lhs,  darkstring const & rhs );
  private:
    char *dstr;
    unsigned int dstrlength;
  public:
    darkstring(const char* str)
    {
      int i=0,length=mystrlen(str);
      dstrlength=length;
      dstr=new char[length+1];
      while(i < length)
      {
        dstr[i]=str[i];
        i++;
      }
      dstr[i]='\0';
    }
    unsigned int find(char const *str);
    darkstring& left(int pos)
    {
      int i=0;
      int y=0;
      char nstr[pos+1];
      while(i < pos)
      {
        nstr[y]=dstr[i];
        i++;
        y++;
      }
      nstr[y+1]='\0';
      darkstring str=nstr;
      return str;
    }
    darkstring& right(int pos)
    {
      int i=0,y=pos,sized=size();
      char nstr[sized-pos+2];
      while(0 > sized)
      {
        nstr[i]=dstr[y];
        y--;
        i++;
      }
      nstr[y+1]='\0';
      darkstring str=nstr;
      return str;
    }
    unsigned int size() const
    {
      return dstrlength;
    }
};
darkstring & operator+=(darkstring &  lhs,  char const* rhs )
{
  int newLength=lhs.size() + mystrlen(rhs), lhs_size=lhs.size();
  int i=0,y=0;
  char *newSTR=new char[newLength];
  while(i<lhs_size)
  {
    newSTR[i]=lhs.dstr[i];
    i++;
  }
  while(i<newLength)
  {
    newSTR[i]=rhs[y];
    y++;
    i++;
  }
  //Nullbyte
  newSTR[i]='\0';
  delete[](lhs.dstr);
  lhs.dstr=newSTR;
  return lhs;
}
std::ostream & operator<<(std::ostream &  lhs,  darkstring const & rhs )
{
  return lhs<<rhs.dstr;
}
darkstring  operator +( darkstring const & lhs, char const* rhs )
{
  darkstring newSTR=lhs.dstr;
  newSTR+=rhs;
  return newSTR;
}
darkstring  operator +( darkstring const & lhs, darkstring const & rhs )
{
  darkstring newSTR=lhs.dstr;
  newSTR+=rhs.dstr;
  return newSTR;
}
darkstring  operator +( char const * lhs, darkstring const & rhs )
{
  darkstring newSTR=lhs;
  newSTR+=rhs.dstr;
  return newSTR;
}
int main(int argc, char** argv)
{
  darkstring str="Hallo ";
  str +="Welt";
 //test
  std::cout << "----Referenz links------"<<std::endl;
  std::cout << str+"--!!--!!" << std::endl;
  std::cout << "---Beides Referenzen----"<<std::endl;
  std::cout << str+str << std::endl;
  std::cout << "---Referenz rechts------"<<std::endl;
  std::cout << "!!--!!--"+str<< "!!--!!--" <<std::endl;
  std::cout << str.right(5);
}


Ich ahne allerdings, das dass Problem nicht in den beiden Funktionen auftritt. Valgrind deutet aber auf eine solch schiere Menge an "Leaks", das ich keinerlei Ahnung habe, wo der Ursprung ist..
Befehl:

Code: Alles auswählen

valgrind --tool=memcheck -v --workaround-gcc296-bugs=yes --leak-check=yes ./strclass
Und Ausgabe:

Code: Alles auswählen

==5799== Memcheck, a memory error detector
==5799== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==5799== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==5799== Command: ./ownSTR
==5799== 
--5799-- Valgrind options:
--5799--    --suppressions=/usr/lib/valgrind/debian-libc6-dbg.supp
--5799--    --tool=memcheck
--5799--    -v
--5799--    --workaround-gcc296-bugs=yes
--5799--    --leak-check=yes
--5799-- Contents of /proc/version:
--5799--   Linux version 3.2.0-4-486 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.51-1
--5799-- Arch and hwcaps: X86, x86-sse1-sse2
--5799-- Page sizes: currently 4096, max supported 4096
--5799-- Valgrind library directory: /usr/lib/valgrind
--5799-- Reading syms from /lib/i386-linux-gnu/ld-2.17.so (0x4000000)
--5799--   Considering /lib/i386-linux-gnu/ld-2.17.so ..
--5799--   .. CRC mismatch (computed d49800f9 wanted 7e1cc473)
--5799--   Considering /usr/lib/debug/lib/i386-linux-gnu/ld-2.17.so ..
--5799--   .. CRC is valid
--5799-- Reading syms from /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR (0x8048000)
--5799-- Reading syms from /usr/lib/valgrind/memcheck-x86-linux (0x38000000)
--5799--   Considering /usr/lib/valgrind/memcheck-x86-linux ..
--5799--   .. CRC mismatch (computed f9c53117 wanted 8a91a8b2)
--5799--   Considering /usr/lib/debug/usr/lib/valgrind/memcheck-x86-linux ..
--5799--   .. CRC is valid
--5799--    object doesn't have a dynamic symbol table
--5799-- Reading suppressions file: /usr/lib/valgrind/debian-libc6-dbg.supp
--5799-- Reading suppressions file: /usr/lib/valgrind/default.supp
==5799== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-5799-by-leon-on-???
==5799== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-5799-by-leon-on-???
==5799== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-5799-by-leon-on-???
==5799== 
==5799== TO CONTROL THIS PROCESS USING vgdb (which you probably
==5799== don't want to do, unless you know exactly what you're doing,
==5799== or are doing some strange experiment):
==5799==   /usr/lib/valgrind/../../bin/vgdb --pid=5799 ...command...
==5799== 
==5799== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==5799==   /path/to/gdb ./ownSTR
==5799== and then give GDB the following command
==5799==   target remote | /usr/lib/valgrind/../../bin/vgdb --pid=5799
==5799== --pid is optional if only one valgrind process is running
==5799== 
--5799-- REDIR: 0x4017fc0 (strlen) redirected to 0x38055304 (vgPlain_x86_linux_REDIR_FOR_strlen)
--5799-- REDIR: 0x4017df0 (index) redirected to 0x380552df (vgPlain_x86_linux_REDIR_FOR_index)
--5799-- Reading syms from /usr/lib/valgrind/vgpreload_core-x86-linux.so (0x4024000)
--5799--   Considering /usr/lib/valgrind/vgpreload_core-x86-linux.so ..
--5799--   .. CRC mismatch (computed bbadfadd wanted 39de28c9)
--5799--   Considering /usr/lib/debug/usr/lib/valgrind/vgpreload_core-x86-linux.so ..
--5799--   .. CRC is valid
--5799-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so (0x4027000)
--5799--   Considering /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so ..
--5799--   .. CRC mismatch (computed 9b401e29 wanted 9e97adf8)
--5799--   Considering /usr/lib/debug/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so ..
--5799--   .. CRC is valid
--5799-- Reading syms from /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 (0x404c000)
--5799--   Considering /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 ..
--5799--   .. CRC mismatch (computed c3328608 wanted 737126b2)
--5799--    object doesn't have a symbol table
--5799-- Reading syms from /lib/i386-linux-gnu/i686/cmov/libm-2.17.so (0x4138000)
--5799--   Considering /lib/i386-linux-gnu/i686/cmov/libm-2.17.so ..
--5799--   .. CRC mismatch (computed 5186fef0 wanted 22262c55)
--5799--   Considering /usr/lib/debug/lib/i386-linux-gnu/i686/cmov/libm-2.17.so ..
--5799--   .. CRC is valid
--5799-- Reading syms from /lib/i386-linux-gnu/libgcc_s.so.1 (0x417b000)
--5799--   Considering /lib/i386-linux-gnu/libgcc_s.so.1 ..
--5799--   .. CRC mismatch (computed f8e2ff85 wanted ec2df6fa)
--5799--    object doesn't have a symbol table
--5799-- Reading syms from /lib/i386-linux-gnu/i686/cmov/libc-2.17.so (0x4198000)
--5799--   Considering /lib/i386-linux-gnu/i686/cmov/libc-2.17.so ..
--5799--   .. CRC mismatch (computed bc59b6d5 wanted d259ca34)
--5799--   Considering /usr/lib/debug/lib/i386-linux-gnu/i686/cmov/libc-2.17.so ..
--5799--   .. CRC is valid
--5799-- REDIR: 0x4215e30 (strnlen) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x42173a0 (strncasecmp) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x4215fd0 (__GI_strrchr) redirected to 0x402b630 (__GI_strrchr)
--5799-- REDIR: 0x4215d70 (__GI_strlen) redirected to 0x402ba60 (__GI_strlen)
--5799-- REDIR: 0x4215590 (strcmp) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x42d8860 (__strcmp_ssse3) redirected to 0x402c5f0 (strcmp)
--5799-- REDIR: 0x409b8a0 (operator new[](unsigned int)) redirected to 0x402a890 (operator new[](unsigned int))
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
--5799-- REDIR: 0x40994f0 (operator delete[](void*)) redirected to 0x4029d10 (operator delete[](void*))
--5799-- REDIR: 0x4215d20 (strlen) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x421c780 (__strlen_sse2_bsf) redirected to 0x402ba40 (strlen)
--5799-- REDIR: 0x42174d0 (memcpy) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x42cc280 (__memcpy_ssse3) redirected to 0x402cc10 (memcpy)
--5799-- REDIR: 0x4216a80 (bcmp) redirected to 0x40245c0 (_vgnU_ifunc_wrapper)
--5799-- REDIR: 0x42e0750 (__memcmp_ssse3) redirected to 0x402d780 (bcmp)
----Referenz links------
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048993: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b0f2 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048AA2: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b0f2 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
Hallo Welt--!!--!!
---Beides Referenzen----
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489C7: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80488A6: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b17c is 0 bytes after a block of size 20 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048B05: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b17c is 0 bytes after a block of size 20 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
Hallo WeltHallo Welt
---Referenz rechts------
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80488A6: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b202 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048B69: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b202 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
!!--!!--Hallo Welt!!--!!--
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x8048881: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048D44: darkstring::right(int) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B9C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x402BA4B: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x402BA57: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x4209AA7: _IO_file_xsputn@@GLIBC_2.1 (fileops.c:1303)
==5799==    by 0x41FEA74: fwrite (iofwrite.c:43)
==5799==    by 0x40D43D5: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x4209ABA: _IO_file_xsputn@@GLIBC_2.1 (fileops.c:1303)
==5799==    by 0x41FEA74: fwrite (iofwrite.c:43)
==5799==    by 0x40D43D5: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== Syscall param write(buf) points to uninitialised byte(s)
==5799==    at 0x42768F3: __write_nocancel (syscall-template.S:81)
==5799==    by 0x4208EE0: _IO_file_write@@GLIBC_2.1 (fileops.c:1262)
==5799==    by 0x4208DC5: new_do_write (fileops.c:538)
==5799==    by 0x420A41D: _IO_do_write@@GLIBC_2.1 (fileops.c:511)
==5799==    by 0x4209691: _IO_file_sync@@GLIBC_2.1 (fileops.c:892)
==5799==    by 0x41FDB81: fflush (iofflush.c:41)
==5799==    by 0x40D40DD: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::sync() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x40D4EDE: std::ostream::flush() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x40AA805: std::ios_base::Init::~Init() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x41CB420: __run_exit_handlers (exit.c:77)
==5799==    by 0x41CB4AC: exit (exit.c:99)
==5799==    by 0x41B18FC: (below main) (libc-start.c:294)
==5799==  Address 0x4033000 is not stack'd, malloc'd or (recently) free'd
==5799== 
��¾��--5799-- REDIR: 0x42117b0 (free) redirected to 0x402a4a0 (free)
==5799== 
==5799== HEAP SUMMARY:
==5799==     in use at exit: 73 bytes in 5 blocks
==5799==   total heap usage: 9 allocs, 4 frees, 111 bytes allocated
==5799== 
==5799== Searching for pointers to 5 not-freed blocks
==5799== Checked 105,548 bytes
==5799== 
==5799== 7 bytes in 1 blocks are definitely lost in loss record 1 of 5
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x8048C57: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048D44: darkstring::right(int) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B9C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 10 bytes in 1 blocks are definitely lost in loss record 2 of 5
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 18 bytes in 1 blocks are definitely lost in loss record 3 of 5
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 18 bytes in 1 blocks are definitely lost in loss record 4 of 5
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 20 bytes in 1 blocks are definitely lost in loss record 5 of 5
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== LEAK SUMMARY:
==5799==    definitely lost: 73 bytes in 5 blocks
==5799==    indirectly lost: 0 bytes in 0 blocks
==5799==      possibly lost: 0 bytes in 0 blocks
==5799==    still reachable: 0 bytes in 0 blocks
==5799==         suppressed: 0 bytes in 0 blocks
==5799== 
==5799== Use --track-origins=yes to see where uninitialised values come from
==5799== ERROR SUMMARY: 35 errors from 22 contexts (suppressed: 0 from 0)
==5799== 
==5799== 1 errors in context 1 of 22:
==5799== Syscall param write(buf) points to uninitialised byte(s)
==5799==    at 0x42768F3: __write_nocancel (syscall-template.S:81)
==5799==    by 0x4208EE0: _IO_file_write@@GLIBC_2.1 (fileops.c:1262)
==5799==    by 0x4208DC5: new_do_write (fileops.c:538)
==5799==    by 0x420A41D: _IO_do_write@@GLIBC_2.1 (fileops.c:511)
==5799==    by 0x4209691: _IO_file_sync@@GLIBC_2.1 (fileops.c:892)
==5799==    by 0x41FDB81: fflush (iofflush.c:41)
==5799==    by 0x40D40DD: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::sync() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x40D4EDE: std::ostream::flush() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x40AA805: std::ios_base::Init::~Init() (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x41CB420: __run_exit_handlers (exit.c:77)
==5799==    by 0x41CB4AC: exit (exit.c:99)
==5799==    by 0x41B18FC: (below main) (libc-start.c:294)
==5799==  Address 0x4033000 is not stack'd, malloc'd or (recently) free'd
==5799== 
==5799== 
==5799== 1 errors in context 2 of 22:
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x4209AA7: _IO_file_xsputn@@GLIBC_2.1 (fileops.c:1303)
==5799==    by 0x41FEA74: fwrite (iofwrite.c:43)
==5799==    by 0x40D43D5: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 3 of 22:
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x402BA4B: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 4 of 22:
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048B69: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b202 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 5 of 22:
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b202 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 6 of 22:
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80488A6: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A0F: operator+(char const*, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B53: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 7 of 22:
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048B05: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b17c is 0 bytes after a block of size 20 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 8 of 22:
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b17c is 0 bytes after a block of size 20 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 9 of 22:
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80488A6: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489DB: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 10 of 22:
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489C7: operator+(darkstring const&, darkstring const&) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048AEF: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 11 of 22:
==5799== Invalid read of size 1
==5799==    at 0x402BA53: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048AA2: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b0f2 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 12 of 22:
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b0f2 is 0 bytes after a block of size 18 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x80489A5: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 13 of 22:
==5799== Invalid read of size 1
==5799==    at 0x8048877: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048993: operator+(darkstring const&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A8C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 1 errors in context 14 of 22:
==5799== Invalid write of size 1
==5799==    at 0x8048934: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==  Address 0x434b06a is 0 bytes after a block of size 10 alloc'd
==5799==    at 0x402A8F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==5799==    by 0x80488D2: operator+=(darkstring&, char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048A4E: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 5 errors in context 15 of 22:
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x4209ABA: _IO_file_xsputn@@GLIBC_2.1 (fileops.c:1303)
==5799==    by 0x41FEA74: fwrite (iofwrite.c:43)
==5799==    by 0x40D43D5: __gnu_cxx::stdio_sync_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 5 errors in context 16 of 22:
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x402BA57: strlen (mc_replace_strmem.c:390)
==5799==    by 0x40D5F8D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17)
==5799==    by 0x8048BAC: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== 
==5799== 6 errors in context 17 of 22:
==5799== Conditional jump or move depends on uninitialised value(s)
==5799==    at 0x8048881: mystrlen(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048C3D: darkstring::darkstring(char const*) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048D44: darkstring::right(int) (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799==    by 0x8048B9C: main (in /home/leon/Desktop/Programmiersprachen/C++/Aufgaben/Operatoren/ownSTR)
==5799== 
==5799== ERROR SUMMARY: 35 errors from 22 contexts (suppressed: 0 from 0)
Ich hoffe, das mir jemand einen Tipp geben kann.
Danke im vorraus :)

Re: left&right nachbau mit unvorhergesehener Ausgabe

Verfasst: Mi Nov 20, 2013 12:28 am
von nufan
darksider3 hat geschrieben:

Code: Alles auswählen

nstr[y+1]='\0';
Warum rechnest du hier +1?
darksider3 hat geschrieben:

Code: Alles auswählen

darkstring right(int pos)
{
    int i=0,y=pos,sized=size();
    char nstr[sized-pos+2];
    while(0 > sized)
    {
    nstr[i]=dstr[y];
    y--;
    i++;
    }
    nstr[y+1]='\0';
    darkstring str=nstr;
    return str;
}
Ähm... da ist gröber was falsch. Bitte prüf mal die Schleifen-Bedingung und die Inidzes.

Einen weiteren Hinweis erhältst du, wenn du mit dem "-Wall" Flag kompilierst ;)

Re: left&right nachbau mit unvorhergesehener Ausgabe

Verfasst: Mi Nov 20, 2013 1:36 pm
von darksider3
dani93 hat geschrieben:
darksider3 hat geschrieben:

Code: Alles auswählen

nstr[y+1]='\0';
Warum rechnest du hier +1?
darksider3 hat geschrieben:

Code: Alles auswählen

darkstring right(int pos)
{
    int i=0,y=pos,sized=size();
    char nstr[sized-pos+2];
    while(0 > sized)
    {
    nstr[i]=dstr[y];
    y--;
    i++;
    }
    nstr[y+1]='\0';
    darkstring str=nstr;
    return str;
}
Ähm... da ist gröber was falsch. Bitte prüf mal die Schleifen-Bedingung und die Inidzes.

Einen weiteren Hinweis erhältst du, wenn du mit dem "-Wall" Flag kompilierst ;)
Jow, in der Schleife war das ein Größer-Als Zeichen, hab das mit einem Kleiner-Als ersetzt sowie das y+1 entfernt(das war wirklich grob..).

Der -Wall Parameter zeigt mir üblicherweise, dass ich die Referenz besser nicht zurückgeben sollte...:

Code: Alles auswählen

g++  -Wall -o "ownSTR" "ownSTR.cpp"
ownSTR.cpp: In member function ‘darkstring& darkstring::left(int)’:
ownSTR.cpp:47:18: warning: reference to local variable ‘str’ returned [enabled by default]
ownSTR.cpp: In member function ‘darkstring& darkstring::right(int)’:
ownSTR.cpp:61:18: warning: reference to local variable ‘str’ returned [enabled by default]
Kompilierung erfolgreich beendet.
Sobald ich also die Referenz entferne, wird mir ein Segmentation Fauld entgegengeworfen..

Code: Alles auswählen

    darkstring left(int pos)
    {
      int i=0;
      int y=0;
      char nstr[pos+1];
      while(i < pos)
      {
        nstr[y]=dstr[i];
        i++;
        y++;
      }
      nstr[y]='\0';
      darkstring str=nstr;
      return str;
    }
    darkstring right(int pos)
    {
      int i=0,y=pos,sized=size();
      char nstr[sized-pos+2];
      while(0 < sized)
      {
        nstr[i]=dstr[y];
        y--;
        i++;
      }
      nstr[y]='\0';
      darkstring str=nstr;
      return str;
    }
Ich frage mich aber, wie ich die Variable(eher das Objekt) fehlerfrei zurückgebe, sodass ich dieses neu zuweisen kann?

Re: left&right nachbau mit unvorhergesehener Ausgabe

Verfasst: Mi Nov 20, 2013 4:37 pm
von nufan
darksider3 hat geschrieben:

Code: Alles auswählen

while(0 < sized)
{
    nstr[i]=dstr[y];
    y--;
    i++;
}
Das kann so noch immer nicht stimmen ^^ Ich behaupte solltest du jemals in diese Schleife kommen, dann kommst du auch nie wieder raus.

Bezüglich der Memory Leaks wäre es vielleicht gut Destruktoren zu implementieren und entsprechende Zuweisungsoperatoren bzw. Copy-Konstruktoren bereitzustellen.