[CODE] What would cause memmory corruption ?

From: Rasmus Ronlev (raro94ab@STUDENT.ECON.CBS.DK)
Date: 12/01/97


Hi,

After endless days of agony, and thoughts of basing my mud on ACK!
(sounded like the right mud base to start with *grin*), I found out what
was causing my famous (?) memory corruption, that caused medit/free to
crash. Fixing the problem still leaves me with one question. Could someone
please look at the below two snippets, one called BEFORE and one called
AFTER (AFTER == NOW ,-) and tell me why the memory was corrupted before,
but not after the change I made in assign_the_shopkeepers ?
If you want to know, the reason I changed it in the first place is, that
I'm saving the spec_proc name if one is assigned in the pfiles, much like
the patch I beleave there's been made available on the ftp site(s) - ain't
the same code though *g*

                        ------- BEFORE -------

void assign_the_shopkeepers(void)
{
  int index;

  cmd_say = find_command("say");
  cmd_tell = find_command("tell");
  cmd_emote = find_command("emote");
  cmd_slap = find_command("slap");
  cmd_puke = find_command("puke");
  for (index = 0; index < top_shop; index++) {
    /* Fix problem with the shop_keeper spec-proc also being assigned from
     * the mob files with the 'SpecialProc: shop_keeper' command.
     * If the shop_keeper proc is already assigned, skip this one.
     */
    if (mob_index[SHOP_KEEPER(index)].func &&
        mob_index[SHOP_KEEPER(index)].func == *shop_keeper)
      continue;
    if (mob_index[SHOP_KEEPER(index)].func)
      SHOP_FUNC(index) = mob_index[SHOP_KEEPER(index)].func;
    mob_index[SHOP_KEEPER(index)].func = shop_keeper;
  }
}

                      ------- END BEFORE -------

This is what I changed the for() loop to:

                        -------- AFTER --------

  for (index = 0; index < top_shop; index++) {
    /* Fix problem with the shop_keeper spec-proc also being assigned from
     * the mob files with the 'SpecialProc: shop_keeper' command.
     * If the shop_keeper proc is already assigned, skip this one.
     */
    if ((SHOP_KEEPER(index) > -1) && (SHOP_KEEPER(index) <= top_of_mobt)) {
      if (mob_index[SHOP_KEEPER(index)].func &&
          mob_index[SHOP_KEEPER(index)].func == shop_keeper) {
        /* Don't do a thing! */
      }
      else {
        if (mob_index[SHOP_KEEPER(index)].func)
          SHOP_FUNC(index) = mob_index[SHOP_KEEPER(index)].func;
        mob_index[SHOP_KEEPER(index)].func = shop_keeper;
      }
    }
  }

                      -------- END AFTER -------

Regards,
Rand

.d
--
        Rasmus Ronlev DOEK'94           http://www.econ.cbs.dk/~raro94ab
             IT-Advisor               mailto:raro94ab@student.econ.cbs.dk

              B.Sc. Computer Science and Business Administration
          Stud. M.Sc. Computer Science and Business Administration


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/08/00 PST