2

Getting the Error 3160003: Invalid table iterator error while trying to execute:

 cleos push action voting.debug debug '[ 0 ]' -p user@active

I have a simple voting contract (full code) where I'm trying to print candidate by id.

Here is a chunk of code which probably doesn't work:

  /// @abi action
  void debug( uint64_t id ) {
    print("Hello, ", name{getcandidate(id)});
  }

  /// @abi action
  account_name getcandidate( uint64_t id ) const {
    Candidates candidates( _self, _self );
    auto element = candidates.find( id );
    return element->name;
  }

The struct which is stored in multi-index table candidates:

struct candidate {
  uint64_t id;
  account_name name;

  auto primary_key() const { return id; }
};
...
typedef eosio::multi_index<N(candidates), candidate> Candidates;

Appreciate any help and advice. I'm using eos 1.1.0.

5

If your table doesn't have any elements, then it will throw this error.

Whenever you use the find command, always check afterwards that an element was found:

auto element = candidates.find( id );
if(element != candidates.end())
{
  return element_name;
}
|improve this answer|||||
  • I have this line (/// @abi table your_table_name i64) here: gist.github.com/RomanFro/…. – Roman Frolov Aug 19 '18 at 8:38
  • 1
    Thank you for answer, it seems like the problem resolved. I forgot to add records to the table and the error message was invoked due to trying to access the id which is absent in the table. – Roman Frolov Aug 19 '18 at 8:40
  • Ok, I will update my answer to show that – Phillip Hamnett - EOS42 Aug 19 '18 at 8:45
  • how do I check when I'm using .begin() instead? I have a declaration like this auto matches = t.get_index<name(”myidx”)>(); after which I do this: for (auto match = matches.begin(); match != matches.end(); match++) { and when I run it, I get the error: ”3160003 invalid_table_iterator: Invalid table iterator”… if I compare matches.begin() == matches.end() I get a false – ekkis Dec 19 '19 at 22:44
  • 1
    @ekkis I recommend posting your own question and showing the code – Phillip Hamnett - EOS42 Jan 13 at 16:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.