ערב טוב, בעיה בקריאה לפונקציה חיצונית - שפת C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

ערב טוב, בעיה בקריאה לפונקציה חיצונית - שפת C


sharonp

Recommended Posts

אהלן :xyxthumbs:

אני כותב תוכנית מסויימת באנליזה נומרית, ועל הדרך צריך להזכר בכללים הנוקשים של שפת 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 ?

קישור לתוכן
שתף באתרים אחרים

הבעייה נובעת מכך שאין בC\C++ (למעט C99 שכן תומכת בזה בתקן, אבל אל תסתמך על זה) תמיכה במערך שמוגדר באופן דינמי על הstack (כלומר שהגודל שלו לא ידוע בזמן הקומפילצייה).

בשביל לפתור את הבעייה משתמשים באלוקצייה דינמית,aka malloc


double* pXArray=NULL;
int n = find_rank();
pxArray = (double *)malloc(n);

ואל תשכח לשחרר לאחר מכן את הזיכרון עם קריאה מתאימה ל free()

אם כל הנושא של אלוקצייה דינמית ומצביעים חדש לך אני ממליץ לך לעבור על ספר\מדריך בנושא, זה אחד הנושאים שאוכלים עליו הכי הרבה קש בC.

קישור לתוכן
שתף באתרים אחרים

כל הנושא הזה של הגדרת גודל המערך ב C הוא כל כך שולי לבעיה שאני פותר שאני פשוט לא חושב שזה שווה את המאמץ לקרוא וללמוד את זה.

נראה לי שאני פשוט אגדיר את הגודל של המערך כבר בהתחלה. לבעיה שלי הספציפית אני יודע את גודל המערך, פשוט רציתי לעשות את זה בצורה יותר כללית שתשרת אותי בעתיד

קישור לתוכן
שתף באתרים אחרים

הבעייה נובעת מכך שאין בC\C++ (למעט C99 שכן תומכת בזה בתקן, אבל אל תסתמך על זה) תמיכה במערך שמוגדר באופן דינמי על הstack (כלומר שהגודל שלו לא ידוע בזמן הקומפילצייה).

בשביל לפתור את הבעייה משתמשים באלוקצייה דינמית,aka malloc


double* pXArray=NULL;
int n = find_rank();
pxArray = (double *)malloc(n);

איפה אתה רואה בקוד שלו מערך ?

ואל תשכח לשחרר לאחר מכן את הזיכרון עם קריאה מתאימה ל free()

אם כל הנושא של אלוקצייה דינמית ומצביעים חדש לך אני ממליץ לך לעבור על ספר\מדריך בנושא, זה אחד הנושאים שאוכלים עליו הכי הרבה קש בC.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...