Skip to content

Kill program without notice #7

@hect1995

Description

@hect1995

I am analyzing the following script:

#include <iostream>
#include <vector>

struct Node{
    int value;
    Node *left = nullptr;
    Node *right = nullptr;
};

std::vector<Node*> createListNodes(int min, int max)
{
    // odered vector with i.e. {0,1,2,3,4}
    Node *node = new Node;
    if (min == max-1)
    {
        node->value = min;
        return std::vector<Node*> {std::move(node)};
    }
    else if (min == max)
    {
        return std::vector<Node*> {};
    }
    std::vector<Node*> alterantive{};
    for (int i=min; i<max; i++)
    {
        auto left = createListNodes(min,i); // for the left side
        auto right = createListNodes(i+1,max); // for the left side
        for (auto elem_left : left)
        {
            for (auto elem_right : right)
            {
                Node *node = new Node;
                node->value = i;
                node->left = elem_left;
                node->right = elem_right;
                alterantive.emplace_back(std::move(node));
            }
        }
    }
    return alterantive;

}

int main()
{
    int N = 4, init=0;
    std::vector<Node*> combinations = createListNodes(init, N);
    int t= 4;

}

With the instruction:
valgrind --leak-check=full --track-origins=yes build/Challenges/DailyCoding_run

And returns :


MacBook-Pro-de-Hector-2:DailyCoding hectoresteban$ valgrind --leak-check=full --track-origins=yes build/Challenges/DailyCoding_run 
==18538== Memcheck, a memory error detector
==18538== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==18538== Using Valgrind-3.16.0.GIT and LibVEX; rerun with -h for copyright info
==18538== Command: build/Challenges/DailyCoding_run
==18538== 
--18538-- UNKNOWN fcntl 101!
--18538-- UNKNOWN fcntl 101! (repeated 2 times)
--18538-- UNKNOWN fcntl 101! (repeated 4 times)
--18538-- UNKNOWN fcntl 101! (repeated 8 times)
--18538-- UNKNOWN fcntl 101! (repeated 16 times)
--18538-- UNKNOWN fcntl 101! (repeated 32 times)
==18538== valgrind: Unrecognised instruction at address 0x1006fba73.
==18538==    at 0x1006FBA73: __pthread_init.cold.2 (in /usr/lib/system/libsystem_pthread.dylib)
==18538==    by 0x1001D072D: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==18538==    by 0x1000291E2: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==18538==    by 0x1000295ED: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==18538==    by 0x10002400A: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x100023F75: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x100022013: ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x1000220B3: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==18538==    by 0x10001059F: dyld::initializeMainExecutable() (in /usr/lib/dyld)
==18538==    by 0x100015AF7: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) (in /usr/lib/dyld)
==18538==    by 0x10000F226: dyldbootstrap::start(dyld3::MachOLoaded const*, int, char const**, dyld3::MachOLoaded const*, unsigned long*) (in /usr/lib/dyld)
==18538==    by 0x10000F024: _dyld_start (in /usr/lib/dyld)
==18538== Your program just tried to execute an instruction that Valgrind
==18538== did not recognise.  There are two possible reasons for this.
==18538== 1. Your program has a bug and erroneously jumped to a non-code
==18538==    location.  If you are running Memcheck and you just saw a
==18538==    warning about a bad jump, it's probably your program's fault.
==18538== 2. The instruction is legitimate but Valgrind doesn't handle it,
==18538==    i.e. it's Valgrind's fault.  If you think this is the case or
==18538==    you are not sure, please let us know and we'll try to fix it.
==18538== Either way, Valgrind will now raise a SIGILL signal which will
==18538== probably kill your program.
==18538== 
==18538== Process terminating with default action of signal 4 (SIGILL)
==18538==  Illegal opcode at address 0x1006FBA73
==18538==    at 0x1006FBA73: __pthread_init.cold.2 (in /usr/lib/system/libsystem_pthread.dylib)
==18538==    by 0x1001D072D: libSystem_initializer (in /usr/lib/libSystem.B.dylib)
==18538==    by 0x1000291E2: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==18538==    by 0x1000295ED: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==18538==    by 0x10002400A: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x100023F75: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x100022013: ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==18538==    by 0x1000220B3: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld)
==18538==    by 0x10001059F: dyld::initializeMainExecutable() (in /usr/lib/dyld)
==18538==    by 0x100015AF7: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) (in /usr/lib/dyld)
==18538==    by 0x10000F226: dyldbootstrap::start(dyld3::MachOLoaded const*, int, char const**, dyld3::MachOLoaded const*, unsigned long*) (in /usr/lib/dyld)
==18538==    by 0x10000F024: _dyld_start (in /usr/lib/dyld)
==18538== 
==18538== HEAP SUMMARY:
==18538==     in use at exit: 0 bytes in 0 blocks
==18538==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==18538== 
==18538== All heap blocks were freed -- no leaks are possible
==18538== 
==18538== For lists of detected and suppressed errors, rerun with: -s
==18538== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 1 from 1)
Illegal instruction: 4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions