פורסם 2009 בנובמבר 2415 שנים אהלן אני כותב תוכנית מסויימת באנליזה נומרית, ועל הדרך צריך להזכר בכללים הנוקשים של שפת C החלק הראשון של התכנית הולך כך : #include <stdio.h>int find_rank(){ int n; printf("Please enter matrix rank:\n "); /* number of equations - 1 */ scanf("%d", &n); return n;}int main(){int i=0; int n = find_rank(); /* call an outside function since we cant declare an array with no finite number of components */double b[n], d[n], c[n], a[n], x[n]; double denom=0; /* denom as a shortcuf for denominator = 'mechane' *//*the first and last T's are constants*/ printf("Enter T0:\n "); scanf("%lf", &b[1] עצרתי במקום שבו התוכנה זיהתה שגיאה- נכתב שהשגיאה היא לפני ; עכשיו אני מניח שהשגיאה קרתה בגלל שהוא ניסה לקלוט ערך למערך שהגודל שלו לא הוכרז, בגלל שמשום מה הוא דילג על הפונקציה החיצונית שיצרתי על מנת למלות את גודל המערך בהכרזת הנתונים (find_rank). מה כתבתי לא נכון שגרם לו לדלג על הפונקציה find_rank ?
פורסם 2009 בנובמבר 2415 שנים הבעייה נובעת מכך שאין בC\C++ (למעט C99 שכן תומכת בזה בתקן, אבל אל תסתמך על זה) תמיכה במערך שמוגדר באופן דינמי על הstack (כלומר שהגודל שלו לא ידוע בזמן הקומפילצייה).בשביל לפתור את הבעייה משתמשים באלוקצייה דינמית,aka mallocdouble* pXArray=NULL;int n = find_rank();pxArray = (double *)malloc(n);ואל תשכח לשחרר לאחר מכן את הזיכרון עם קריאה מתאימה ל free()אם כל הנושא של אלוקצייה דינמית ומצביעים חדש לך אני ממליץ לך לעבור על ספר\מדריך בנושא, זה אחד הנושאים שאוכלים עליו הכי הרבה קש בC.
פורסם 2009 בנובמבר 2415 שנים מחבר כל הנושא הזה של הגדרת גודל המערך ב C הוא כל כך שולי לבעיה שאני פותר שאני פשוט לא חושב שזה שווה את המאמץ לקרוא וללמוד את זה.נראה לי שאני פשוט אגדיר את הגודל של המערך כבר בהתחלה. לבעיה שלי הספציפית אני יודע את גודל המערך, פשוט רציתי לעשות את זה בצורה יותר כללית שתשרת אותי בעתיד
פורסם 2009 בנובמבר 2415 שנים בקיצור, הצורה הכללית היא מה ש-Moonblade אמר.(אגב, Moonblade, ב-malloc צריך לזכור לכפול ב-sizeof של הטיפוס שאתה רוצה לאלקץ, כי הוא מאלקץ בבתים)
פורסם 2009 בנובמבר 2515 שנים הבעייה נובעת מכך שאין בC\C++ (למעט C99 שכן תומכת בזה בתקן, אבל אל תסתמך על זה) תמיכה במערך שמוגדר באופן דינמי על הstack (כלומר שהגודל שלו לא ידוע בזמן הקומפילצייה).בשביל לפתור את הבעייה משתמשים באלוקצייה דינמית,aka mallocdouble* pXArray=NULL;int n = find_rank();pxArray = (double *)malloc(n);איפה אתה רואה בקוד שלו מערך ?ואל תשכח לשחרר לאחר מכן את הזיכרון עם קריאה מתאימה ל free()אם כל הנושא של אלוקצייה דינמית ומצביעים חדש לך אני ממליץ לך לעבור על ספר\מדריך בנושא, זה אחד הנושאים שאוכלים עליו הכי הרבה קש בC.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.