18-05-2012, 23:07
|
|
|
|
חבר מתאריך: 21.12.04
הודעות: 30,021
|
|
שאלה ב C - הקצאות דינאמיות ומצביעים
נראה לי שכבר שכחתי C... ניסיתי לכתוב תוכנית ממש פשוטה, ואני מקבל התראה ממערכת ההפעלה
שאני חורג מהזיכרון והתוכנית קורסת.
מה שהיא צריכה לעשות זה לקבל כקלט מהמשתמש את הגודל של המערך, ולאחר מכן לאפשר הוספה / הסרה של איברים. הגודל יהיה דינאמי ובינתיים הספקתי לטפל רק בחלק שמגדיל את המערך (ידנית עם מאלוק וללא שימוש בריאלוק).
משום מה, בשורה 77 אני מקבל את השגיאה שציינתי קודם, והתוכנית קורסת ואני פשוט לא מבין מה עשיתי לא נכון.
שגיאה זו מתקבלת כבר בהכנסת הערך הראשון, עוד לפני שאני מטפל בהגדלת המערך אם הגיע לקצה הקיבולת שלו.
אשמח לעזרתכם :-)
קוד PHP:
#include <stdio.h>
int show_menu(); int set_array_size(int*); int insert(int*, int*, int);
int main() { int *array, menu_option, exit = 0, index = 0, array_size; array_size = set_array_size(array); while (!exit) { menu_option = show_menu(); switch(menu_option) { case 1: array_size = insert (array, &index, array_size); break; case 2: printf("remove\n"); break; case 3: printf("print\n"); break; case 4: exit = 1; break; default: printf("You pressed a bad key. Try again\n"); break; } } return 0; }
int show_menu() { int menu_select; printf("*** MENU ***\n1. Insert a value to the array\n2. Remove a value from the array\n3. Print the array\n4. Exit\n"); scanf ("%d", &menu_select); return menu_select; }
int set_array_size(int* array) { int size; printf("Insert array size: "); scanf ("%d", &size); array = (int*) malloc (sizeof(int) * size); if (array != NULL) { return size; } else { printf("Error allocating memory!"); return 0; } }
int insert(int *array, int* index, int size) { int new_data, *temp_array, i; printf("insert a value to the array: "); scanf ("%d", &new_data); if (*index > size) // The array is too small. Need to allocate more memory { size *= 2; temp_array = (int*) malloc (sizeof(int) * size); for (i = 0 ; i < size ; i++) { temp_array[i] = array[i]; } free(array); array = temp_array; } array[*index] = new_data; // <-- this is where my program crushes and burns *index++; return size; }
|