crashing node: free() invalid pointer error caused by imageTransport
I'm trying to run the subscriber node example from this tutorial http://wiki.ros.org/image_transport/Tutorials/SubscribingToImages, about writing an image subscriber node using the image_transport package. It compiles, but when I try to run it I get an error saying free() invalid pointer. I'm using ros Indigo on Ubuntu 14.04 x86.
This is the code from the tutorial:
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
//
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
try
{
cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
cv::waitKey(30);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "image_listener");
ros::NodeHandle nh;
cv::namedWindow("view");
cv::startWindowThread();
image_transport::ImageTransport it(nh);
image_transport::Subscriber sub = it.subscribe("softkinetic_bringup_node/rgb/image_color", 1, imageCallback);
ros::spin();
cv::destroyWindow("view");
}
Compiling returns no errors. The error after trying to run the node with rosrun:
*** Error in `/home/*/ros/devel/lib/controllers/experiment5': free(): invalid pointer: 0x000000000061e678 ***
Aborted (core dumped)
gdb run:
(gdb) r
Starting program: /home/*/ros/devel/lib/controllers/experiment5
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffde7ca700 (LWP 27899)]
[New Thread 0x7fffdd6da700 (LWP 27901)]
[New Thread 0x7fffdced9700 (LWP 27902)]
[New Thread 0x7fffd7fff700 (LWP 27903)]
[New Thread 0x7fffd77fe700 (LWP 27908)]
[New Thread 0x7fffd5f7d700 (LWP 27909)]
[New Thread 0x7fffd577c700 (LWP 27910)]
[New Thread 0x7fffd4f7b700 (LWP 27911)]
*** Error in `/home/*/ros/devel/lib/controllers/experiment5': free(): invalid pointer: 0x000000000061e678 ***
Program received signal SIGABRT, Aborted.
0x00007ffff6495cc9 in __GI_raise (sig=sig@entry=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
gdb where:
(gdb) where
#0 0x00007ffff6495cc9 in __GI_raise (sig=sig@entry=6)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff64990d8 in __GI_abort () at abort.c:89
#2 0x00007ffff64d2394 in __libc_message (do_abort=do_abort@entry=1,
fmt=fmt@entry=0x7ffff65e0b28 "*** Error in `%s': %s: 0x%s ***\n")
at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff64de66e in malloc_printerr (ptr=<optimized out>,
str=0x7ffff65dcc19 "free(): invalid pointer", action=1) at malloc.c:4996
#4 _int_free (av=<optimized out>, p=<optimized out>, have_lock=0)
at malloc.c:3840
#5 0x00007fffeee34243 in rospack::Stackage::~Stackage() ()
from /opt/ros/indigo/lib/librospack.so
#6 0x00007fffeee2ac2f in rospack::Rosstackage::addStackage(std::string const&)
() from /opt/ros/indigo/lib/librospack.so
#7 0x00007fffeee2ed0d in rospack::Rosstackage::crawlDetail(std::string const&, bool, int, bool, std::vector<rospack::DirectoryCrawlRecord*, std::allocator<rospack::DirectoryCrawlRecord*> >&, boost::unordered::unordered_set<std::string, boost::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> >&) () from /opt/ros/indigo/lib/librospack.so
#8 0x00007fffeee2ec53 in rospack::Rosstackage::crawlDetail(std::string const&, bool, int, bool, std::vector<rospack::DirectoryCrawlRecord*, std::allocator<rospack::DirectoryCrawlRecord*> >&, boost::unordered::unordered_set<std::string, boost::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> >---Type <return> to continue, or q <return> to quit---
&) () from /opt/ros/indigo/lib/librospack.so
#9 0x00007fffeee2ec53 in rospack::Rosstackage::crawlDetail(std::string const&, bool, int, bool, std::vector<rospack::DirectoryCrawlRecord*, std::allocator<rospack::DirectoryCrawlRecord*> >&, boost::unordered::unordered_set<std::string, boost::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> >&) () from /opt/ros/indigo/lib/librospack.so
#10 0x00007fffeee2ec53 in rospack::Rosstackage::crawlDetail(std::string const&, bool, int, bool, std::vector<rospack::DirectoryCrawlRecord*, std::allocator<rospack::DirectoryCrawlRecord*> >&, boost::unordered::unordered_set<std::string, boost::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> >&) () from /opt/ros/indigo/lib/librospack.so
#11 0x00007fffeee2fb45 in rospack::Rosstackage::crawl(std::vector<std::string, std::allocator<std::string> >, bool) () from /opt/ros/indigo/lib/librospack.so
#12 0x00007fffeee3e321 in rospack::rospack_run(int, char**, rospack::Rosstackage&, std::string&) () from /opt/ros/indigo/lib/librospack.so
#13 0x00007fffeee3ae86 in rospack::ROSPack::run(int, char**) ()
from /opt/ros/indigo/lib/librospack.so
#14 0x00007fffeee3b1b9 in rospack::ROSPack::run(std::string const&) ()
from /opt/ros/indigo/lib/librospack.so
#15 0x00007ffff5a04dd3 in ros::package::command(std::string const&) ()
from /opt/ros/indigo/lib/libroslib.so
#16 0x00007ffff5a04fbd in ros::package::getPath(std::string const&) ()
from /opt/ros/indigo/lib/libroslib.so
---Type <return> to continue, or q <return> to quit---
#17 0x00007ffff7bbc796 in pluginlib::ClassLoader<image_transport::PublisherPlugin>::ClassLoader(std::string, std::string, std::string, std::vector<std::string, std::allocator<std::string> >) ()
from /opt/ros/indigo/lib/libimage_transport.so
#18 0x00007ffff7bbcdd3 in boost::detail::sp_if_not_array<pluginlib::ClassLoader<image_transport::PublisherPlugin> >::type boost::make_shared<pluginlib::ClassLoader<image_transport::PublisherPlugin>, char [16], char [33]>(char const (&) [16], char const (&) [33]) () from /opt/ros/indigo/lib/libimage_transport.so
#19 0x00007ffff7bad42c in image_transport::ImageTransport::ImageTransport(ros::NodeHandle const&) () from /opt/ros/indigo/lib/libimage_transport.so
#20 0x000000000040b3fd in main (argc=1, argv=0x7fffffffdc08)
at /home/*/ros/src/controllers/src/experiment5.cpp:25
I traced the error back to the line: image_transport::ImageTransport it(nh); However from this point I don't know what to do to solve the problem, I'm also quite new to ROS. I've got another node in a different package using this line and that node works fine. Anyone suggestions?
Asked by JuSU on 2016-05-18 12:40:22 UTC
Comments