On Wed, 18 Feb 1998, Cipher wrote: -> So I added an int array resistances[10] to said struct, removed it ->from its previous struct, and made the necessary change in utils.c. After ->wiping the pfile (just one player, heh.. me.), I logged on and statted ->myself to see if all was well. Turned out all my resistance percentages ->were set to 0, except for resistance[5], which was something like ->137198217. *boggle* Attempting to set that particular resistance to any ->value (via do_set) crashed the mud, but I could set any other .... If your above description of what you did isn't omitting any major steps, then I know one problem with your code right off. Initialize the values to zero in init_char(), as saving throws are. The function is in db.c. After doing so, wipe your pfile again and cross your fingers. -> I'm vaguely aware of things called 'malloc' and 'calloc', but don't ->know if they would solve my problem or how to use them, as I am a ->semi-newbie to C (but not a /complete/ dumbass ;). Any suggestions? malloc() and calloc() are C library functions that are used for dynamic memory allocation, which has nothing to do with pre-created arrays (e.g., array[10] is pre-created, and cannot change size). For example: int *dynamic_int_array; /* initialize dynamic_int_array to dynamic_int_array[5] */ dynamic_int_array = (int *) calloc(sizeof(int), 5); dynamic_int_array[2] = 1; /* free data and allocate using malloc() */ free(dynamic_int_array); dynamic_int_array = (int *) malloc(sizeof(int)*5); dynamic_int_array[2] = 1; /* resize dynamic_int_array[5] to dynamic_int_array[10] */ dynamic_int_array = realloc(dynamic_int_array, sizeof(int)*10); dynamic_int_array[9] = 1; The allocation is performed while the program is running, so prior to that point in the code, dynamic_int_array was not taking up memory (this is admittedly an over-simplification and not 100% true; but I'm not writing this to be concise, only clear). The only differences between malloc() and calloc() are (a) calloc takes a second parameter, even though the behaviour is easily simulated with malloc() (e.g., calloc(sizeof(int), 5) initializes an array of 5 integers; malloc(sizeof(int)*5) does the same), (b) calloc() initializes each element of the array to 0 (which is probably why it has the second paramter seperate), malloc() leaves it uninitialized (same as the compiler when dealing with pre-defined arrays/variables). -dak +------------------------------------------------------------+ | 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/15/00 PST