octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #36656] deleting rows from sparse matrices lea


From: Jordi Gutiérrez Hermoso
Subject: [Octave-bug-tracker] [bug #36656] deleting rows from sparse matrices leads to failed assertion sometimes
Date: Thu, 14 Jun 2012 15:45:58 +0000
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20110109 Tundracanine/3.6.13

Follow-up Comment #3, bug #36656 (project octave):

After trying to pinpoint the problem, the trouble seems to be with deleting
rows of a sparse matrix for which nnz is 0:


a=sparse([],[],[],1,1);
a(1,:)=[];


I get the following valgrind output:


==14655== Invalid read of size 4
==14655==    at 0x4F6A792: Sparse<double>::SparseRep::ccidx(int) const
(Sparse.h:129)
==14655==    by 0x4F61205: Sparse<double>::cidx(int) const (Sparse.h:484)
==14655==    by 0x64CAB1A: Sparse<double>::delete_elements(idx_vector const&,
idx_vector const&) (Sparse.cc:1268)
==14655==    by 0x545C817:
octave_base_sparse<SparseMatrix>::delete_elements(octave_value_list const&)
(ov-base-sparse.cc:235)
==14655==    by 0x5661113: oct_assignop_null_assign(octave_base_value&,
octave_value_list const&, octave_base_value const&) (op-sm-sm.cc:152)
==14655==    by 0x5321F37: octave_base_value::numeric_assign(std::string
const&, std::list<octave_value_list, std::allocator<octave_value_list> >
const&, octave_value const&) (ov-base.cc:1310)
==14655==    by 0x544EC4B:
octave_base_sparse<SparseMatrix>::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov-base-sparse.cc:131)
==14655==    by 0x53DDD1C: octave_value::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov.cc:1302)
==14655==    by 0x53DDF3A: octave_value::assign(octave_value::assign_op,
std::string const&, std::list<octave_value_list,
std::allocator<octave_value_list> > const&, octave_value const&) (ov.cc:1344)
==14655==    by 0x51F52BC: octave_lvalue::assign(octave_value::assign_op,
octave_value const&) (oct-lvalue.cc:40)
==14655==    by 0x545FD1F: tree_simple_assignment::rvalue1(int)
(pt-assign.cc:241)
==14655==    by 0x546B49C: tree_evaluator::visit_statement(tree_statement&)
(pt-eval.cc:736)
==14655==  Address 0x114fc084 is 0 bytes after a block of size 4 alloc'd
==14655==    at 0x4027EA7: operator new[](unsigned long) (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==14655==    by 0x4F6C581: Sparse<double>::SparseRep::SparseRep(int, int, int)
(Sparse.h:93)
==14655==    by 0x64C28AE: Sparse<double>::Sparse(int, int, double)
(Sparse.cc:224)
==14655==    by 0x64CB1BB: Sparse<double>::index(idx_vector const&, bool)
const (Sparse.cc:1373)
==14655==    by 0x64CCA44: Sparse<double>::index(idx_vector const&, idx_vector
const&, bool) const (Sparse.cc:1583)
==14655==    by 0x64CA939: Sparse<double>::delete_elements(idx_vector const&,
idx_vector const&) (Sparse.cc:1263)
==14655==    by 0x545C817:
octave_base_sparse<SparseMatrix>::delete_elements(octave_value_list const&)
(ov-base-sparse.cc:235)
==14655==    by 0x5661113: oct_assignop_null_assign(octave_base_value&,
octave_value_list const&, octave_base_value const&) (op-sm-sm.cc:152)
==14655==    by 0x5321F37: octave_base_value::numeric_assign(std::string
const&, std::list<octave_value_list, std::allocator<octave_value_list> >
const&, octave_value const&) (ov-base.cc:1310)
==14655==    by 0x544EC4B:
octave_base_sparse<SparseMatrix>::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov-base-sparse.cc:131)
==14655==    by 0x53DDD1C: octave_value::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov.cc:1302)
==14655==    by 0x53DDF3A: octave_value::assign(octave_value::assign_op,
std::string const&, std::list<octave_value_list,
std::allocator<octave_value_list> > const&, octave_value const&) (ov.cc:1344)
==14655== 
==14655== Invalid read of size 4
==14655==    at 0x4F6A792: Sparse<double>::SparseRep::ccidx(int) const
(Sparse.h:129)
==14655==    by 0x4F61205: Sparse<double>::cidx(int) const (Sparse.h:484)
==14655==    by 0x64CABC4: Sparse<double>::delete_elements(idx_vector const&,
idx_vector const&) (Sparse.cc:1273)
==14655==    by 0x545C817:
octave_base_sparse<SparseMatrix>::delete_elements(octave_value_list const&)
(ov-base-sparse.cc:235)
==14655==    by 0x5661113: oct_assignop_null_assign(octave_base_value&,
octave_value_list const&, octave_base_value const&) (op-sm-sm.cc:152)
==14655==    by 0x5321F37: octave_base_value::numeric_assign(std::string
const&, std::list<octave_value_list, std::allocator<octave_value_list> >
const&, octave_value const&) (ov-base.cc:1310)
==14655==    by 0x544EC4B:
octave_base_sparse<SparseMatrix>::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov-base-sparse.cc:131)
==14655==    by 0x53DDD1C: octave_value::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov.cc:1302)
==14655==    by 0x53DDF3A: octave_value::assign(octave_value::assign_op,
std::string const&, std::list<octave_value_list,
std::allocator<octave_value_list> > const&, octave_value const&) (ov.cc:1344)
==14655==    by 0x51F52BC: octave_lvalue::assign(octave_value::assign_op,
octave_value const&) (oct-lvalue.cc:40)
==14655==    by 0x545FD1F: tree_simple_assignment::rvalue1(int)
(pt-assign.cc:241)
==14655==    by 0x546B49C: tree_evaluator::visit_statement(tree_statement&)
(pt-eval.cc:736)
==14655==  Address 0x114fa644 is 0 bytes after a block of size 4 alloc'd
==14655==    at 0x4027EA7: operator new[](unsigned long) (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==14655==    by 0x4F6C581: Sparse<double>::SparseRep::SparseRep(int, int, int)
(Sparse.h:93)
==14655==    by 0x64C28AE: Sparse<double>::Sparse(int, int, double)
(Sparse.cc:224)
==14655==    by 0x64CB1BB: Sparse<double>::index(idx_vector const&, bool)
const (Sparse.cc:1373)
==14655==    by 0x64CCA44: Sparse<double>::index(idx_vector const&, idx_vector
const&, bool) const (Sparse.cc:1583)
==14655==    by 0x64CA9B8: Sparse<double>::delete_elements(idx_vector const&,
idx_vector const&) (Sparse.cc:1264)
==14655==    by 0x545C817:
octave_base_sparse<SparseMatrix>::delete_elements(octave_value_list const&)
(ov-base-sparse.cc:235)
==14655==    by 0x5661113: oct_assignop_null_assign(octave_base_value&,
octave_value_list const&, octave_base_value const&) (op-sm-sm.cc:152)
==14655==    by 0x5321F37: octave_base_value::numeric_assign(std::string
const&, std::list<octave_value_list, std::allocator<octave_value_list> >
const&, octave_value const&) (ov-base.cc:1310)
==14655==    by 0x544EC4B:
octave_base_sparse<SparseMatrix>::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov-base-sparse.cc:131)
==14655==    by 0x53DDD1C: octave_value::subsasgn(std::string const&,
std::list<octave_value_list, std::allocator<octave_value_list> > const&,
octave_value const&) (ov.cc:1302)
==14655==    by 0x53DDF3A: octave_value::assign(octave_value::assign_op,
std::string const&, std::list<octave_value_list,
std::allocator<octave_value_list> > const&, octave_value const&) (ov.cc:1344)
==14655== 
==14655== 



    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?36656>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]