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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: Mr-virus در 19 امرداد 1397، 02:37 ب‌ظ

عنوان: خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 19 امرداد 1397، 02:37 ب‌ظ
سلام دوستان عزیز.بنده یک مشکلی دارم در زبان c.بنده گاهی اوقات که قصد کامپایل برخی کدها با gcc رو دارم خطای زیر رو میگیرم.
Aborted (core dumped)
و گاهی بعد از کامپایل و موقع اجرای کد این خطار رو میگیرم.این به چه دلیل هست؟(در حال حاضر به کدها دسترسی ندارم خدمتتون ارسال کنم).
*** stack smashing detected ***: <unknown> terminated                               
Aborted (core dumped)
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: alend در 20 امرداد 1397، 06:46 ق‌ظ
لطفا یک نمونه کد بزارید.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: سلمان م. در 23 امرداد 1397، 11:08 ق‌ظ
از pointerها توی کدت استفاده کردی؟
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 28 امرداد 1397، 01:14 ب‌ظ
از pointerها توی کدت استفاده کردی؟
سلام.بله.از ارایه های کاراکتری استفاده شده.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: alend در 29 امرداد 1397، 10:13 ق‌ظ
یعنی واقعا منتظر جوابی. بدون نمونه کد تقریبا غیر ممکن است به پاسخ برسی.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 16 شهریور 1397، 06:41 ب‌ظ
یعنی واقعا منتظر جوابی. بدون نمونه کد تقریبا غیر ممکن است به پاسخ برسی.
ببخشید به سورس ها دسترسی نداشتم.الان یک کدی نوشتم(بسیار مبتدی هستم) و با موفقیت کامپایل شد.ران هم شد.اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %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)
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: علی رزم دیده در 16 شهریور 1397، 07:37 ب‌ظ
سلام

میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
بله دقیقاً به خاطر همین خطای سینتکس هستش که باعث می شه حافظه (memory) به درستی اختصاص پیدا نکنه.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: nixoeen در 16 شهریور 1397، 09:56 ب‌ظ
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: علی رزم دیده در 16 شهریور 1397، 10:51 ب‌ظ
بله معین جان درست می گن اشتباه از من بودش. تو زبان های کامپایلی Syntax error ها خودشون رو زمان کامپایل نشون می دن.
این مورد شما ناشی از اشتباه برنامه نویسی هست ولی Syntax error نه.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: محمدرضا مقیمی در 16 شهریور 1397، 11:25 ب‌ظ
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.
دقیقا ... این syntax error نیست ... این یه جور logic error هست ...
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: majid.ee در 17 شهریور 1397، 12:36 ق‌ظ
اما بعد از وارد کردن عدد مد نظر این ارور رو گرفتم(که البته میدونم به دلیل قرار دادن %s به جای %c هست.میخوام بدونم این ارور به دلیل سینتکس هست یا دلایل دیگری داره؟
خیر، مشکل Syntax نیست. مشکلات Syntax باعث میشن که اصلا کد شما کامپایل نشه.

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

الان اسم این مشکل چی می شه ؟ چون خطای منطقی (https://en.wikipedia.org/wiki/Logic_error) هم که "محمدرضا مقیمی" گفتن به خطایی می گن که خروجی غلط بده  ولی باعث کرش نشه الان مشکل "Mr-virus" کرش می ده اسمش چی می شه ؟
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: محمدرضا مقیمی در 17 شهریور 1397، 02:41 ق‌ظ
"nixoeen" ببخشید من با فضای این فروم آشنا نیستم اگه جای نامناسبی سوال می پرسم  :-k

الان اسم این مشکل چی می شه ؟ چون خطای منطقی (https://en.wikipedia.org/wiki/Logic_error) هم که "محمدرضا مقیمی" گفتن به خطایی می گن که خروجی غلط بده  ولی باعث کرش نشه الان مشکل "Mr-virus" کرش می ده اسمش چی می شه ؟

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

مقاله (http://cambridgegcsecomputing.org/sites/94/upload/userfiles/217p_q_teachersnotes_editedct_3proof.pdf)

به این قسمت:

(http://s8.picofile.com/file/8336640042/Selection_456.png)

و همچنین این مقاله (https://www.techopedia.com/definition/8122/logic-error) .

مقاله‌ای که شما بهش اشاره کردی از ویکیپدیا دارای هیچ منبعی نیست دوست من ...
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: nixoeen در 19 شهریور 1397، 03:32 ق‌ظ
لان اسم این مشکل چی می شه ؟
طبقه‌بندی‌های مختلفی وجود داره، ولی من به نام Runtime Error میشناسمش.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 29 شهریور 1398، 08:45 ب‌ظ
سلام دوستان عزیز.بنده یک مشکلی دارم در زبان 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)
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: esmaeelE در 29 شهریور 1398، 09:04 ب‌ظ
اعلان و تعریف متغیر به فرم 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;
}
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 29 شهریور 1398، 09:37 ب‌ظ
اعلان و تعریف متغیر به فرم [i ] x صحیح نیست.
شما متغیر عددی i را مقدار دهی اولیه نکردین.   initialize

الان به دلیل اینکه متغیر i مقدار اولیه نامعتبر Garbage Value دارد تعریف آرایه به طول i صحیح نیست.
سلام.ممنون از توجهتون.بنده اومدم در همین سورس یک تغییر ایجاد کردم به صورتی که
#include<stdio.h>
#include <stdlib.h>
int main()
{
    int j ,i = 5, x[i] ;
    printf("please enter a number\n");
    scanf("%d" , &i);
    for( j = 0 ; j < i ; j++ )
    {

        scanf("%d",x[j]);
        return 12;
    }
    for(j = 0 ; j < i ; j++ )
    {
        printf ("\nx is %d" , x[j]);
        return 13;
    }
}

اما باز هم همون ارور رو گرفتم!
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: esmaeelE در 29 شهریور 1398، 09:58 ب‌ظ
scanf   اول چه عددی می زنید؟
پس از هر اسکن عدد موجود در آن متغیر را چاپ کنید.

درکل گام به گام پیش برید
اول ببینید اسکن کردن تا مقادیر درون آرایه درست انجام میشه.
بعد سعی کنید محتوای آرایه را چاپ کنید
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 30 شهریور 1398، 12:03 ق‌ظ
scanf   اول چه عددی می زنید؟
پس از هر اسکن عدد موجود در آن متغیر را چاپ کنید.

درکل گام به گام پیش برید
اول ببینید اسکن کردن تا مقادیر درون آرایه درست انجام میشه.
بعد سعی کنید محتوای آرایه را چاپ کنید

سلام.هر عددی برای i قرار میدم مشکل وجود داره.اولین عدد ارایه وارد میشه ارور میگیرم.
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: esmaeelE در 30 شهریور 1398، 03:14 ق‌ظ
تابع اسکن را به این شکل استفاده کنید.
scanf("%d",&x[j]);
برای اینکه از این دست مشکلات دیگر نداشته باشید

۱) مستندات لازم برای استفاده توابع را مطالعه کنید.
https://en.cppreference.com/w/c/io/fscanf
۲) درصورتی که با کامپایلر GCC کار می کنید آرگومان Wall را در زمان کامپایل فعال کنید بسیاری از اشکلات اینچنینی را گزارش می کند.
۳) از گوگل و استک اوورفلو استفاده کنید.

مثلا جستجو عبارتی نظیر این شما را به نحوه صحیح استفاده از اسکن راهنمایی می کند.
c scanf int array

پی نوشت


۱) این مشکل به وضوح خطای زمان اجراست. Runtime error
۲) به دلیل مشکلات scanf از تابع fscanf یا fgets استفاده کنید.
۳) این شکل صدا زدن اسکن مناسب برای آرایه کاراکتری است بدون &
عنوان: پاسخ : خطا زمان کامپایل یا زمان اجرای برخی کدها در زبان C
ارسال شده توسط: Mr-virus در 31 شهریور 1398، 12:06 ق‌ظ
تابع اسکن را به این شکل استفاده کنید.
scanf("%d",&x[j]);
برای اینکه از این دست مشکلات دیگر نداشته باشید

۱) مستندات لازم برای استفاده توابع را مطالعه بفرمایید.

https://en.cppreference.com/w/c/io/fscanf

۲) درصورتی که با کامپایلر GCC کار می کنید آرگومان Wall را در زمان کامپایل فعال کنید بسیاری از اشکلات اینچنینی را گزارش می کند.

۳) از گوگل و استک اوورفلو استفاده کنید.مثلا جستجو عبارتی نظیر این شما را به نحوه صحیح استفاده از اسکن راهنمایی می کند.
c scanf int array



پی نوشت


۱) این مشکل به وضوح خطای زمان اجراست.
Runtime error

۲) به دلیل مشکلات scanf از تابع fscanf استفاده کنید.
۳) این شکل صدا زدن اسکن مناسب برای آرایه کاراکتری است بدون &
ممنونم