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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: بی نام تا اطلاع ثانوی در 08 شهریور 1392، 03:10 ب‌ظ

عنوان: مشکل در اجرای برنامه‌ی نوشته شده با C (حل شد)
ارسال شده توسط: بی نام تا اطلاع ثانوی در 08 شهریور 1392، 03:10 ب‌ظ
سلام
یه برنامه با C نوشتم و با gcc کامپایلش کردم. حالا که میخوام برنامه رو اجرا کنم خطای زیر رو میده
Segmentation fault (core dumped)
مشکل از کجاست؟ ???
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: ح.م در 08 شهریور 1392، 03:48 ب‌ظ
دقیقا این مشکل هم برای من پیش اومد دلیلش هم این بود که طول آرایه ای که انتخاب کرده بودم خیلی زیاد بود ، البته وقتی با یه کامپایلر غیر آزاد هم این کار رو کردم اینجوری شد ولی طول حداکثری که برای آرایه انتخاب کردم بیشتر بود فکر کنم مشکل توی تخصیص حافظه باشه من هم نفهمیدم دقیقا چشه ! اگه کسی هست راهنمایی کنه
شما متن برنامه رو بگذار ببینیم چی هست مشکل کجاست ؟ البته اگر برنامتون تحت GPL منتشر می شه ؟!
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: بی نام تا اطلاع ثانوی در 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;
}
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: ح.م در 08 شهریور 1392، 04:06 ب‌ظ
مشکل همون اولشه طول آرایه در زبان C باید کاملا مشخص باشه ! پس نمی شه نوشت
x[n]اگر هم می خوای از
x[n]استفاده کنی باید قبل از شروع main با constant int n=10 حتما تعریفش کنی و بهش مقدار بدی ! ۱۰ حالا مثاله
اون n هم باید از لیست int هات پاک کنی !
استاد برنامه نویسی ما خودش ازاین قضیه کلافه بود که چرا نمی شه طول آرایه متغییر باشه حالا حال و روزش رو می فهمم جالب تر اینکه طول آرایه هم یه حدی داره و بیشتر هم بشه همین error شما رو می ده من خودم کلافم چون یه برنامه نوشتن که n امین عدد اول را با الگورتیم غربال حساب می کرد مشکل این بود که باید عددهای اول یه جایی ذخیره می شدن و این محدودیت برای کار من ایجاد می کرد چون تا اونجایی که می خواستم نمی تونستم عدد اول ذخیره کنم.
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: بی نام تا اطلاع ثانوی در 08 شهریور 1392، 04:12 ب‌ظ
قراره طول آرایه رو از ورودی دریافت کنه. من که نمیدونم کاربر چه عددی رو وارد میکنه!
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: ح.م در 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
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: بی نام تا اطلاع ثانوی در 08 شهریور 1392، 04:22 ب‌ظ
این مشکل زبان c هست دیگه شما باید حداکثر مقدار n رو پیش بینی کنی !

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

بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون
عنوان: پاسخ : مشکل در اجرای یرنامه‌ی نوشته شده با C
ارسال شده توسط: Ha:D در 08 شهریور 1392، 04:59 ب‌ظ
بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون
قابل نداشت
(حل شد) تو عنوان تاپیک فراموش نشه یه وقت (:
عنوان: پاسخ : مشکل در اجرای برنامه‌ی نوشته شده با C (حل شد)
ارسال شده توسط: ح.م در 08 شهریور 1392، 06:37 ب‌ظ
بله مشکل حل شد. اول باید n رو دریافت میکردم. ممنون
استاد ما می گفت حتی نمی شه همچین کاری کرد ، دیگه به حرف هیچ استادی اعتماد نمی کنم