🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Gordon Joly and Paul Otto Tue, 21 Mar 1989 15:23
GNU dumps core with fatal signal 11.
#1774
Author: Gordon Joly and Paul Otto
Date: Tue, 21 Mar 1989 15:23
104 lines
4516 bytes
G++ and libg++ 1.34.0 with config.g++ sun3 on a SUN-3/160 with gcc 1.34.

Bug is twofold:
(a) I think that this code should compile OK
(b) in any case, the compiler should not dump core

The following script was done on a SUN-3/75 running SunOS 3.4:

Script started on Tue Mar 21 14:54:15 1989
io% g++ -v
g++ version 1.34.0
io% g++ -c fib.cc
In function struct Integer fib (int):
fib.cc:17: Segmentation violation
Program c++ got fatal signal 11.
io% ls -l
total 1486
- -rw-------  1 otto          313 Mar 21 08:53 Makefile
- -rw-------  1 otto         3745 Mar 21 14:55 bug1
- -rw-------  1 otto            0 Mar 21 14:59 bug2
- -rw-r--r--  1 otto      1491770 Mar 21 15:01 core
- -rw-------  1 otto          507 Mar 21 14:51 fib.bug1.cc
- -rw-------  1 otto          507 Mar 21 09:05 fib.cc
- -rw-------  1 otto          375 Mar 21 09:04 runfib.cc
- -rw-------  1 otto         3223 Mar 21 09:01 table.cc
- -rw-------  1 otto         1638 Mar 21 09:02 table.h
io% cat fib.cc
//
// Example for B11b - of use of tables.
//
// A memo-ising function - using doubly recursive fibonacci as example
//
//                                      G. P. Otto, 1987

#include        "table.h"

static table fibresults;                        // table of known results

Integer
fib(int n)
{
        Integer res = fibresults.lookup(n);     // lookup answer
        if (!fibresults.lastlookupOK){          // if not yet known
                res = (n < 2)? 1 : (fib(n-1) + fib(n-2));       // calculate it
                fibresults.insert(n,res);               // and note the result
        }
        return(res);
}
// PS didn't use "dispose"!
io% cat table.h
//
// a simple "table" class, written for B11b by G. P. Otto, 1987
//
// In this version, the public interface lacks any way of traversing
// the table, so if you don't know what you're looking for, you can't
// find it.
//
// The data-type for "keytype" is almost arbitrary, but you must be able
// to check equality.  (Actually assume that "==" works for keys.)
// IMPORTANT: the hash function needs to be re-designed for some different
// types & frequencies of keys.  (See table.cc)
//

// NEED: declarations for "keytype" & "datumtype" data-types
typedef int     keytype;
#include        <Integer.h>
typedef Integer datumtype;

struct cell {                   // structure to hold data on a linked list
        keytype         key;
        datumtype       datum;
        cell            *next;          // pointer to next cell
};

static const int        hash_tab_size = 97;
                        // hash table size - usually best to make it a prime

class table {
        cell *  list[hash_tab_size];    // each list holds the data whose
                                        //  keys hash to that array index
public:
        table();                        // create an empty table
        ~table();                       // destroy a table, reclaiming
                                        //  space & tidying up as necessary
        void insert(keytype, datumtype);
                                        // "table[key] = ..."
                                        //  overwrite previous entry if 
                                        //  there is one with same key.
                                        //  error message if full.
        datumtype lookup(keytype);      // "... = table[key]"
                                        //  errors (such as no item with
                                        //  specified key, are handled by
                                        //  "lastlookupOK", below.
        int lastlookupOK;               // true if last "lookup" succeeded,
                                        //  false otherwise
        void dispose(keytype);          // delete (key, data) pair from table.
                                        //  No-op if there isn't such a pair.
        // Wot! No traversal?
};
io% ^D
script done on Tue Mar 21 14:56:25 1989

------- End of Forwarded Message
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads