Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-313

std::valarray::apply() uses uninitialized storage

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.1.2, 4.1.3
    • 4.2.0
    • 26. Numerics
    • None
    • all

    • Runtime Error

    Description

      The program below is designed to detect memory corruption (such as the use of uninitialized storage) in valarray. When compiled
      with the latest trunk it aborts at runtime.

      $ cat t.cpp && make t && ./t
      #include <cassert>
      #include <valarray>

      struct S {
      const S* const self;
      S (): self (this) { }
      S (const S &s): self (this)

      { assert (&s == s.self); }

      ~S ()

      { assert (this == self); }

      S& operator= (const S &s)

      { assert (this == self && &s == s.self); return *this; }

      };

      S foo (S s)

      { return s; }
      S bar (const S &s) { return s; }

      int main ()
      {
      const std::valarray<S> a (1);

      a.apply (foo);
      a.apply (bar);
      }
      gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/examples/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long t.cpp
      gcc t.o -o t -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s -lsupc++ -lm
      Assertion failed: this == self && &s == s.self, file t.cpp, line 10
      Abort (core dumped)

      Attachments

        Issue Links

          Activity

            People

              sebor Martin Sebor
              sebor Martin Sebor
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: