Last active
December 17, 2015 19:19
-
-
Save neil-s/5659737 to your computer and use it in GitHub Desktop.
Basic stack implementation. Segfaults.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include "hello.hh" | |
template<class T> void Stack<T>::append(T val) { | |
Item **pp = &head; | |
while(*pp) {pp = &((*pp)->next);} | |
*pp = new Item(val); | |
} | |
template<class T> void Stack<T>::push(T val) { | |
Item *item = new Item(val); | |
if(head) {item->next = head;} | |
head = item; | |
} | |
template<class T> T Stack<T>::pop() { | |
if(!head) { | |
std::cout << "Empty" << std::endl; | |
return NULL; | |
} | |
Item *item = head; | |
T val = item->val; | |
head = item->next; | |
std::cout << "Popped: " << val << std::endl; | |
delete item; | |
return val; | |
} | |
template<class T> Stack<T>::~Stack() { | |
while(head){ | |
pop(); | |
} | |
} | |
template<class T> void Stack<T>::test(void) { | |
while(head){ | |
pop(); | |
} | |
} | |
int main() { | |
Stack<char> s; | |
s.push('a'), s.append('b'); | |
// char ans1 = (s.pop(), s.pop()); | |
// char ans2 = s.pop(); | |
// s.test(); | |
// delete &s; | |
// char res; | |
// std::cin >> res; | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
template<class T> class Stack { | |
struct Item { //class with all public members | |
T val; | |
Item* next; | |
Item(T v) : val(v), next(0) {} | |
}; | |
Item* head; | |
Stack(const Stack& s) {} //private | |
Stack& operator=(const Stack& s) {} // | |
public: | |
Stack() : head(0) {} | |
~Stack(); // should generally be virtual | |
T pop(); | |
void push(T val); | |
void append(T val); | |
void test(void); | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
macbook:Exam neil$ valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./a.out | results.txt | |
-bash: results.txt: command not found | |
==24090== Memcheck, a memory error detector | |
==24090== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. | |
==24090== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info | |
==24090== Command: ./a.out | |
==24090== | |
==24090== | |
==24090== HEAP SUMMARY: | |
==24090== in use at exit: 18,499 bytes in 33 blocks | |
==24090== total heap usage: 35 allocs, 2 frees, 18,531 bytes allocated | |
==24090== | |
==24090== 8 bytes in 1 blocks are still reachable in loss record 1 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x7FFF5FC11C2A: malloc (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC19C4E: operator new(unsigned long) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0817E: std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::_M_insert_aux(__gnu_cxx::__normal_iterator<char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> > >, char const* (* const&)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC08260: std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> >::insert(__gnu_cxx::__normal_iterator<char const* (**)(dyld_image_states, unsigned int, dyld_image_info const*), std::vector<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*), std::allocator<char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)> > >, char const* (* const&)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC054FA: dyld::registerImageStateBatchChangeHandler(dyld_image_states, char const* (*)(dyld_image_states, unsigned int, dyld_image_info const*)) (in /usr/lib/dyld) | |
==24090== by 0x1D5ACB: dyld_register_image_state_change_handler (in /usr/lib/system/libdyld.dylib) | |
==24090== by 0x1D6ACB: _dyld_initializer (in /usr/lib/system/libdyld.dylib) | |
==24090== by 0xECE73: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== | |
==24090== 87 bytes in 7 blocks are still reachable in loss record 2 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x256358: strdup (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x3FC802: _xpc_strdup (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402CCF: _xpc_dictionary_insert (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402E0E: xpc_dictionary_set_string (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404E8C: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== | |
==24090== 88 bytes in 1 blocks are still reachable in loss record 3 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x1DE9B0: get_or_create_key_element (in /usr/lib/system/libkeymgr.dylib) | |
==24090== by 0x1DEBC9: _keymgr_get_and_lock_processwide_ptr_2 (in /usr/lib/system/libkeymgr.dylib) | |
==24090== by 0x1DEC36: __keymgr_initializer (in /usr/lib/system/libkeymgr.dylib) | |
==24090== by 0xECE6E: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC034B7: dyld::initializeMainExecutable() (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0760A: dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**) (in /usr/lib/dyld) | |
==24090== | |
==24090== 136 bytes in 1 blocks are still reachable in loss record 4 of 9 | |
==24090== at 0xD9C3: calloc (vg_replace_malloc.c:597) | |
==24090== by 0x3FC8FA: _xpc_calloc (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x3FD1D4: _xpc_base_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x406C32: _xpc_domain_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404F1E: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC034B7: dyld::initializeMainExecutable() (in /usr/lib/dyld) | |
==24090== | |
==24090== 224 bytes in 7 blocks are still reachable in loss record 5 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x3FC93D: _xpc_malloc (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402CB4: _xpc_dictionary_insert (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402E0E: xpc_dictionary_set_string (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404E8C: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC034B7: dyld::initializeMainExecutable() (in /usr/lib/dyld) | |
==24090== | |
==24090== 348 bytes in 7 blocks are still reachable in loss record 6 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x256358: strdup (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x3FC802: _xpc_strdup (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x403BF5: xpc_string_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402DFD: xpc_dictionary_set_string (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404E8C: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== | |
==24090== 608 bytes in 1 blocks are still reachable in loss record 7 of 9 | |
==24090== at 0xD9C3: calloc (vg_replace_malloc.c:597) | |
==24090== by 0x3FC8FA: _xpc_calloc (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x3FD1D4: _xpc_base_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402FDA: xpc_dictionary_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404E63: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC034B7: dyld::initializeMainExecutable() (in /usr/lib/dyld) | |
==24090== | |
==24090== 616 bytes in 7 blocks are still reachable in loss record 8 of 9 | |
==24090== at 0xD9C3: calloc (vg_replace_malloc.c:597) | |
==24090== by 0x3FC8FA: _xpc_calloc (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x3FD1D4: _xpc_base_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x403BEA: xpc_string_create (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x402DFD: xpc_dictionary_set_string (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0x404E8C: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) | |
==24090== by 0xECE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) | |
==24090== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) | |
==24090== | |
==24090== 16,384 bytes in 1 blocks are still reachable in loss record 9 of 9 | |
==24090== at 0xC713: malloc (vg_replace_malloc.c:274) | |
==24090== by 0x2633F7: __smakebuf (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x259D19: __swsetup (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x28FD2D: __sfvwrite (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x28FCA4: fwrite (in /usr/lib/system/libsystem_c.dylib) | |
==24090== by 0x42710: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) (in /usr/lib/libstdc++.6.0.9.dylib) | |
==24090== by 0x427E9: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/libstdc++.6.0.9.dylib) | |
==24090== by 0x100000B99: Stack<char>::pop() (hello.cpp:23) | |
==24090== by 0x100000BFF: Stack<char>::~Stack() (hello.cpp:29) | |
==24090== by 0x1000008A0: main (hello.cpp:50) | |
==24090== | |
==24090== LEAK SUMMARY: | |
==24090== definitely lost: 0 bytes in 0 blocks | |
==24090== indirectly lost: 0 bytes in 0 blocks | |
==24090== possibly lost: 0 bytes in 0 blocks | |
==24090== still reachable: 18,499 bytes in 33 blocks | |
==24090== suppressed: 0 bytes in 0 blocks | |
==24090== | |
==24090== For counts of detected and suppressed errors, rerun with: -v | |
==24090== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) |
Fedjmike
commented
May 28, 2013
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment