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

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

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


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C  (دفعات بازدید: 3953 بار)

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

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
سلام دوستان عزیز.بنده یک مشکلی دارم در زبان c.بنده گاهی اوقات که قصد کامپایل برخی کدها با gcc رو دارم خطای زیر رو میگیرم.
Aborted (core dumped)
و گاهی بعد از کامپایل و موقع اجرای کد این خطار رو میگیرم.این به چه دلیل هست؟(در حال حاضر به کدها دسترسی ندارم خدمتتون ارسال کنم).
*** stack smashing detected ***: <unknown> terminated                               
Aborted (core dumped)

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
لطفا یک نمونه کد بزارید.

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
از pointerها توی کدت استفاده کردی؟

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
از pointerها توی کدت استفاده کردی؟
سلام.بله.از ارایه های کاراکتری استفاده شده.

آفلاین alend

  • High Hero Member
  • *
  • ارسال: 1319
یعنی واقعا منتظر جوابی. بدون نمونه کد تقریبا غیر ممکن است به پاسخ برسی.

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
یعنی واقعا منتظر جوابی. بدون نمونه کد تقریبا غیر ممکن است به پاسخ برسی.
ببخشید به سورس ها دسترسی نداشتم.الان یک کدی نوشتم(بسیار مبتدی هستم) و با موفقیت کامپایل شد.ران هم شد.اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟

سورس:
#include<stdio.h>


int main(){
  char chara[]={'a','b','c','d','e','f','j'};
  int i;
  scanf("%d",&i);
  printf("Your day is %s",chara[i]);


}

پیغام بعد از اجرا و وارد کردن عدد:
Segmentation fault (core dumped)
« آخرین ویرایش: 16 شهریور 1397، 06:44 ب‌ظ توسط Mr-virus »

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
سلام

میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
بله دقیقاً به خاطر همین خطای سینتکس هستش که باعث می شه حافظه (memory) به درستی اختصاص پیدا نکنه.

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.

آفلاین علی رزم دیده

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1244
  • جنسیت : پسر
  • ali76 سابق
بله معین جان درست می گن اشتباه از من بودش. تو زبان های کامپایلی Syntax error ها خودشون رو زمان کامپایل نشون می دن.
این مورد شما ناشی از اشتباه برنامه نویسی هست ولی Syntax error نه.

آفلاین محمدرضا مقیمی

  • Jr. Member
  • *
  • ارسال: 27
  • جنسیت : پسر
  • عادت‌ها همیشگی نیستن ...
    • میگیم
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.
دقیقا ... این syntax error نیست ... این یه جور logic error هست ...

آفلاین majid.ee

  • Jr. Member
  • *
  • ارسال: 33
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.

"nixoeen" ببخشید من با فضای این فروم آشنا نیستم اگه جای نامناسبی سوال می پرسم  :-k

الان اسم این مشکل چی می شه ؟ چون خطای منطقی هم که "محمدرضا مقیمی" گفتن به خطایی می گن که خروجی غلط بده  ولی باعث کرش نشه الان مشکل "Mr-virus" کرش می ده اسمش چی می شه ؟
« آخرین ویرایش: 17 شهریور 1397، 12:41 ق‌ظ توسط majid.ee »

آفلاین محمدرضا مقیمی

  • Jr. Member
  • *
  • ارسال: 27
  • جنسیت : پسر
  • عادت‌ها همیشگی نیستن ...
    • میگیم
"nixoeen" ببخشید من با فضای این فروم آشنا نیستم اگه جای نامناسبی سوال می پرسم  :-k

الان اسم این مشکل چی می شه ؟ چون خطای منطقی هم که "محمدرضا مقیمی" گفتن به خطایی می گن که خروجی غلط بده  ولی باعث کرش نشه الان مشکل "Mr-virus" کرش می ده اسمش چی می شه ؟

دوست من لطفا به این مقاله از دانشگاه کمبریج توجه کنین:

مقاله

به این قسمت:



و همچنین این مقاله .

مقاله‌ای که شما بهش اشاره کردی از ویکیپدیا دارای هیچ منبعی نیست دوست من ...
« آخرین ویرایش: 17 شهریور 1397، 02:53 ق‌ظ توسط محمدرضا مقیمی »

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
لان اسم این مشکل چی می شه ؟
طبقه‌بندی‌های مختلفی وجود داره، ولی من به نام Runtime Error میشناسمش.

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
سلام دوستان عزیز.بنده یک مشکلی دارم در زبان c.بنده گاهی اوقات که قصد کامپایل برخی کدها با gcc رو دارم خطای زیر رو میگیرم.
Aborted (core dumped)
و گاهی بعد از کامپایل و موقع اجرای کد این خطار رو میگیرم.این به چه دلیل هست؟(در حال حاضر به کدها دسترسی ندارم خدمتتون ارسال کنم).
*** stack smashing detected ***: <unknown> terminated                               
Aborted (core dumped)

سلام دوستان.قبلا این موضوع رو ایجاد کرده بودم.الان مجددا ارورهای مشابه میگیریم.برای مثال توجه کنید:

#include<stdio.h>
#include <stdlib.h>
int main()
{
    int j ,i , x[i] ;
    printf("please enter a number\n");
    scanf("%d" , &i);
    for( j = 0 ; j < i ; j++ )
    {
       
        scanf("%d",x[j]);
     
    }
    for(j = 0 ; j < i ; j++ )
    {
        printf ("\nx is %d" , x[j]);
     
    }
}
که ارور زیر رو برمیگردونه بعد از اجرا و وارد کردن دومین عدد:
Segmentation fault (core dumped)

آفلاین esmaeelE

  • ناظر انجمن
  • *
  • ارسال: 1270
  • جنسیت : پسر
اعلان و تعریف متغیر به فرم x صحیح نیست.
شما متغیر عددی i را مقدار دهی اولیه نکردین.   initialize

الان به دلیل اینکه متغیر i مقدار اولیه نامعتبر Garbage Value دارد تعریف آرایه به طول i صحیح نیست.

به نظر میرسه شما قصد تعریف آرایه ای با طول نامعین در زمان كامپایل دارید که قرار است در زمان اجرا طول آن معین شود.

برای چنین کاری باید از اختصاص حافظه پویا Dynamic Memory Allocation استفاده کنید.
به این شکل که با تعریف آرایه به فرم اشاره گر عددی و صدا زدن تابع malloc حافظه ای به طول i برای آن رزرو کنید.

حدس من اینه که چنین کدی کار میکنه برای شما

int i;
scanf("%d",&i);
int *x=malloc (sizeof(int) *i);

پس از اعمال چنین تغییری برای اختصاص حافظه به آرایه به صورت پویا حالا نوبت به پر کردن آن با تابع scanf که در کد خودتون انجام دادین.

استفاده از تابع malloc  نیاز به هدر   <include <stdlib.h# هم دارد.


[ویرایش]


یک روش دیگه استفاده از مفهوم VLA  است که تنها در زبان C مجاز است و در ++C نه.

int i ,j;
printf("please enter array length: ");
scanf("%d", &i);
int x[i];
   
for( j = 0 ; j < i ; j++)
{
   scanf("%d", &x[j]);
}

و نکته دیگر اینکه نمی‌توان چنین آرایه‌ای را در زمان تعریف مقدار دهی اولیه کرد یعنی این دستور مجاز نیست.

int x[i]={0};
[ویرایش ۲]

با هر بار صدا زدن تابع ()malloc باید مقدار خروجی برای صحت اختصاص حافظه پویا بررسی شود.

و هر اختصاص حافظه باید شامل رهایی هم باشد. باپایان یافتن نیاز به استفاده از حافظه با صدا زدن     free حافظه آزاد کنید.

در لیست آرگومان های تابع main حتمن void قرار دهید.


ویرایش نهایی برنامه:


#include <stdio.h>
#include <stdlib.h>

int main(void) {
   
    int i;
scanf("%d",&i);


int *x = malloc(sizeof(int) *i);

if (!x){
printf("Memory alocation failed ...\n");
///handle failed case
}


free(x);
return 0;
}
« آخرین ویرایش: 07 بهمن 1398، 06:18 ق‌ظ توسط esmaeelE »