انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: مشکل در اجرای برنامه‌ی نوشته شده با C (حل شد)  (دفعات بازدید: 2363 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین بی نام تا اطلاع ثانوی

  • Sr. Member
  • *
  • ارسال: 401
  • جنسیت : پسر
سلام
یه برنامه با C نوشتم و با gcc کامپایلش کردم. حالا که میخوام برنامه رو اجرا کنم خطای زیر رو میده
Segmentation fault (core dumped)
مشکل از کجاست؟ ???
« آخرین ویرایش: 08 شهریور 1392، 05:03 ب‌ظ توسط سید ظهیر قاضوی »

آفلاین ح.م

  • High Hero Member
  • *
  • ارسال: 1274
  • جنسیت : پسر
  • دین بدون خرد مانند خرد بدون دین بی معناست
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #1 : 08 شهریور 1392، 03:48 ب‌ظ »
دقیقا این مشکل هم برای من پیش اومد دلیلش هم این بود که طول آرایه ای که انتخاب کرده بودم خیلی زیاد بود ، البته وقتی با یه کامپایلر غیر آزاد هم این کار رو کردم اینجوری شد ولی طول حداکثری که برای آرایه انتخاب کردم بیشتر بود فکر کنم مشکل توی تخصیص حافظه باشه من هم نفهمیدم دقیقا چشه ! اگه کسی هست راهنمایی کنه
شما متن برنامه رو بگذار ببینیم چی هست مشکل کجاست ؟ البته اگر برنامتون تحت GPL منتشر می شه ؟!
عاقبت انحصار شکست و سرانجام کمونیسم گنویی دیکتاتوریست !
الگوی متن باز از هر جهت بر الگوی نرم افزار آزاد رجحان دارد
وَسَيَعْلَمُ الَّذِينَ ظَلَمُوا أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ

آفلاین بی نام تا اطلاع ثانوی

  • Sr. Member
  • *
  • ارسال: 401
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #2 : 08 شهریور 1392، 03:54 ب‌ظ »
دقیقا این مشکل هم برای من پیش اومد دلیلش هم این بود که طول آرایه ای که انتخاب کرده بودم خیلی زیاد بود ، البته وقتی با یه کامپایلر غیر آزاد هم این کار رو کردم اینجوری شد ولی طول حداکثری که برای آرایه انتخاب کردم بیشتر بود فکر کنم مشکل توی تخصیص حافظه باشه من هم نفهمیدم دقیقا چشه ! اگه کسی هست راهنمایی کنه
شما متن برنامه رو بگذار ببینیم چی هست مشکل کجاست ؟ البته اگر برنامتون تحت GPL منتشر می شه ؟!

یکی از دوستام یه سوال برام فرستاد گفت برنامه‌اش رو بنویس (گویا ترم تابستان برداشته و این تکلیفشه)
طول آرایه مشخص نیست، از ورودی دریافت میکنه
#include <stdio.h>
#include <string.h>

main()
{
int n, i, j, x[n], s, w, rr, f, mf, a, b, c, r, xxx, bmm, kmmm, k;
char add, mul, factn, kmm, sortac, sortdc, print, new, end, cmd;
printf("enter n: ");
scanf("%d", &n);
for(i=0 ; i<n ; ++i)
{
printf("\nenter numbers: ");
scanf("%d", &x[i]);
}
while(1)
{
printf("\nEnter your commands:");
scanf("%s", cmd);
switch(cmd)
{
case 'add':
for(i=0 ; i<n; ++i)
{
s=0;
s+=x[i];
}
break;
case 'mul':
for(i=0 ; i<n ; ++i)
{
s=1;
s*=x[i];
}
break;
case 'factn':
for(i=0 ; i<n ; ++i)
{
mf=0;
xxx=1;
while(xxx>0)
{
w=1;
f=1;
rr=x[i]/w%10;
f*=r;
mf+=f;
w*=10;
xxx=x[i]/w;
}
}
break;
case 'kmm':
for(i=0 ; i<n-2 ; ++i)
{
a=x[i]; b=x[i+1];
xxx=1;
while(r>0)
{
r=a%b;
a=b;
b=r;
bmm=a;
}
kmmm=x[i]*x[i+1]/bmm;
a=kmmm; b=x[i+2];
while(r>0)
{
r=a%b;
a=b;
b=r;
bmm=a;
}
kmmm=kmmm*x[i+2]/bmm;
}
break;
case 'sortac':
for(i=0 ; i<n-1 ; ++i)
for(j=i+1 ; j<n ; ++j)
if(strcmp(x[i],x[j])>0)
{
k=x[i];
x[i]=x[j];
x[j]=k;
}
break;
case 'sortdc':
for(i=0 ; i<n-1 ; ++i)
for(j=i+1 ; j<n ; ++j)
if(strcmp(x[i],x[j])>0)
{
k=x[i];
x[i]=x[j];
x[j]=k;
}
break;
case 'print':
for(i=n ; i>0 ; --i)
printf("%d   ", x[i]);
break;
case 'new':
{
printf("\fEnter new numbers: ");
for(i=0 ; i<n ; ++i)
scanf("%d", &x[i]);
printf("\nNunbers changed.");
}
break;
case 'end':
break;
default:
printf("\nWrong command, try again");
continue;
}
}
return 0;
}

آفلاین ح.م

  • High Hero Member
  • *
  • ارسال: 1274
  • جنسیت : پسر
  • دین بدون خرد مانند خرد بدون دین بی معناست
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #3 : 08 شهریور 1392، 04:06 ب‌ظ »
مشکل همون اولشه طول آرایه در زبان C باید کاملا مشخص باشه ! پس نمی شه نوشت
x[n]اگر هم می خوای از
x[n]استفاده کنی باید قبل از شروع main با constant int n=10 حتما تعریفش کنی و بهش مقدار بدی ! ۱۰ حالا مثاله
اون n هم باید از لیست int هات پاک کنی !
استاد برنامه نویسی ما خودش ازاین قضیه کلافه بود که چرا نمی شه طول آرایه متغییر باشه حالا حال و روزش رو می فهمم جالب تر اینکه طول آرایه هم یه حدی داره و بیشتر هم بشه همین error شما رو می ده من خودم کلافم چون یه برنامه نوشتن که n امین عدد اول را با الگورتیم غربال حساب می کرد مشکل این بود که باید عددهای اول یه جایی ذخیره می شدن و این محدودیت برای کار من ایجاد می کرد چون تا اونجایی که می خواستم نمی تونستم عدد اول ذخیره کنم.
« آخرین ویرایش: 08 شهریور 1392، 04:15 ب‌ظ توسط H.m »
عاقبت انحصار شکست و سرانجام کمونیسم گنویی دیکتاتوریست !
الگوی متن باز از هر جهت بر الگوی نرم افزار آزاد رجحان دارد
وَسَيَعْلَمُ الَّذِينَ ظَلَمُوا أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ

آفلاین بی نام تا اطلاع ثانوی

  • Sr. Member
  • *
  • ارسال: 401
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #4 : 08 شهریور 1392، 04:12 ب‌ظ »
قراره طول آرایه رو از ورودی دریافت کنه. من که نمیدونم کاربر چه عددی رو وارد میکنه!

آفلاین ح.م

  • High Hero Member
  • *
  • ارسال: 1274
  • جنسیت : پسر
  • دین بدون خرد مانند خرد بدون دین بی معناست
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #5 : 08 شهریور 1392، 04:16 ب‌ظ »
این مشکل زبان c هست دیگه شما باید حداکثر مقدار n رو پیش بینی کنی !
البته اینجا یک برنامه پیدا کردم که این مشکل رو نداشت از * استفاده کرده بود
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int i;
   int* i_array;     // this will be the array
   int j;

// find out how many integers are required
   printf("How many integers? ");
   scanf("%d",&i);

// Now allocate memory space
   i_array = (int*)malloc(i*sizeof(int));    // allocate storage for the array

// code that uses the new array
   for (j=0;j<i;j++)
   {
      i_array[j]=j;                            // the pointer can be used as an array
      printf("%d\n",i_array[j]);
   }
   free((void*) i_array);                       // free up memory for reuse.

   system("pause");
   return 0;
 }
http://www.phy225.dept.shef.ac.uk/mediawiki/index.php/Arrays,_dynamic_array_allocation
« آخرین ویرایش: 08 شهریور 1392، 04:22 ب‌ظ توسط H.m »
عاقبت انحصار شکست و سرانجام کمونیسم گنویی دیکتاتوریست !
الگوی متن باز از هر جهت بر الگوی نرم افزار آزاد رجحان دارد
وَسَيَعْلَمُ الَّذِينَ ظَلَمُوا أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ

آفلاین بی نام تا اطلاع ثانوی

  • Sr. Member
  • *
  • ارسال: 401
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #6 : 08 شهریور 1392، 04:22 ب‌ظ »
این مشکل زبان c هست دیگه شما باید حداکثر مقدار n رو پیش بینی کنی !

عجب!!! نمیدونستم. ممنون از راهنماییتون

آفلاین Ha:D

  • Jr. Member
  • *
  • ارسال: 55
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #7 : 08 شهریور 1392، 04:45 ب‌ظ »
اگه میخوای طول آرایه رو کاربر وارد کنه باید اول n رو تعریف کنی و مقدارش از کاربر گرفته بشه ، بعدشم میتونی آرایه رو تعریف کنی با طول n  که اینجا n یه عدد مشخصه که کاربر واردش کرده...
اینجوری :int n;
scanf("%d",&n);
int x[n];
اگه اینجوری حل نشه باید به تعداد n براش حافظه اختصاص بدی که در این صورت باید قبلش آرایه رو با * (اشاره گر) تعریف کرده باشی...
« آخرین ویرایش: 08 شهریور 1392، 04:48 ب‌ظ توسط H4:D »

آفلاین بی نام تا اطلاع ثانوی

  • Sr. Member
  • *
  • ارسال: 401
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #8 : 08 شهریور 1392، 04:55 ب‌ظ »
اگه میخوای طول آرایه رو کاربر وارد کنه باید اول n رو تعریف کنی و مقدارش از کاربر گرفته بشه ، بعدشم میتونی آرایه رو تعریف کنی با طول n  که اینجا n یه عدد مشخصه که کاربر واردش کرده...
اینجوری :int n;
scanf("%d",&n);
int x[n];
اگه اینجوری حل نشه باید به تعداد n براش حافظه اختصاص بدی که در این صورت باید قبلش آرایه رو با * (اشاره گر) تعریف کرده باشی...

بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون

آفلاین Ha:D

  • Jr. Member
  • *
  • ارسال: 55
  • جنسیت : پسر
پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
« پاسخ #9 : 08 شهریور 1392، 04:59 ب‌ظ »
بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون
قابل نداشت
(حل شد) تو عنوان تاپیک فراموش نشه یه وقت (:

آفلاین ح.م

  • High Hero Member
  • *
  • ارسال: 1274
  • جنسیت : پسر
  • دین بدون خرد مانند خرد بدون دین بی معناست
پاسخ : مشکل در اجرای برنامه‌ی نوشته شده با C (حل شد)
« پاسخ #10 : 08 شهریور 1392، 06:37 ب‌ظ »
بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون
استاد ما می گفت حتی نمی شه همچین کاری کرد ، دیگه به حرف هیچ استادی اعتماد نمی کنم
عاقبت انحصار شکست و سرانجام کمونیسم گنویی دیکتاتوریست !
الگوی متن باز از هر جهت بر الگوی نرم افزار آزاد رجحان دارد
وَسَيَعْلَمُ الَّذِينَ ظَلَمُوا أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ