Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Lỗi segmentation fault (core dumped)

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Mặc định Lỗi segmentation fault (core dumped)

    Chương trình của mình sau khi biên dich thì không có lỗi nhưng khi chạy thử thì máy báo lỗi segmentation fault (core dumped).Đó là lỗi j ? Mình phải sửa sao? Ai biết chỉ jum mình nhé! cảm ơn nhìu.

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    post cái source ra đây mới phân tích được sai ở đâu mà sinh ra cái segment fault
    None!

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    1

    source chương trình của mình nè!
    C Code:
    1. /*chuont trinh doi 1 bieu thuc dang trung to sang hau to*/
    2. #include<stdio.h>
    3. #include<string.h>
    4. #include<stdlib.h>
    5. #define MAX 100
    6. #define TRUE 1
    7. #define FALSE 0
    8. typedef struct
    9. {  
    10.     char data[MAX];
    11.     int top;
    12. }stack;
    13. int isempty(stack *st)
    14.      {
    15.          if (st->top==-1)
    16.              return (TRUE);
    17.          else
    18.              return (FALSE);
    19.      }
    20. int ktuutien(char a)
    21. {
    22.     if(a=='(')
    23.        return 0;    
    24.     if(a=='-')
    25.        return 1;
    26.     if(a=='+')
    27.        return 1;
    28.     if(a=='*')
    29.        return 2;
    30.     if(a=='/')
    31.        return 2;
    32. }
    33. int kttoanhang(char a)
    34. {
    35.     if((a>='0')&&(a<='9'))
    36.         return(TRUE);
    37.     else
    38.         return(FALSE);
    39. }
    40. int kttoantu(char a)
    41. {  
    42.     if((a=='+')||(a=='-')||(a=='*')||(a='/'))
    43.         return (TRUE);
    44.     else
    45.         return (FALSE);
    46. }
    47.  
    48.  main(void)
    49. {
    50.      char c,bthuc[MAX],bthuc1[MAX];
    51.      int i;
    52.      int j=0;
    53.      stack k;
    54.      printf("\n Nhap mot bieu thuc:");
    55.      scanf("%s",bthuc);
    56.      /*
    57.       *kiem tra du lieu nhap vao
    58.       */
    59.      for(i=0;i<strlen(bthuc);i++)                  
    60.         {
    61.             if(kttoantu(bthuc[i])&&kttoantu(bthuc[i+1]))
    62.                  printf("Nhap sai.Nhap lai!");
    63.             if((!kttoantu(bthuc[i]))&&(!kttoanhang(bthuc[i])))
    64.                  printf("Nhap sai.Nhap lai!");
    65.         }
    66.      /*
    67.       *chuyen tu bieu thuc trung to sang hau to
    68.      */
    69.      for(i=0;i<strlen(bthuc);i++)
    70.         {  
    71.             c=bthuc[i];
    72.             if(kttoanhang(c))
    73.                 bthuc1[j++]=c;
    74.             if(c=='(')      
    75.                 {   k.top++;     //day vap ngan xep k
    76.                     k.data[k.top]=c;
    77.                 }
    78.             if(kttoantu(c))
    79.                 {
    80.                     if(!isempty(&k))
    81.                     {
    82.                         if(kttoantu(k.data[k.top])&&((ktuutien(c)==ktuutien(k.data[k.top]))||(ktuutien(c) < ktuutien(k.data[k.top]))))                  // kiem tra do uu tien giua cac toan tu
    83.                            {  
    84.                                bthuc1[j++]=k.data[k.top];
    85.                                k.top--;
    86.                            }
    87.                         else
    88.                             {  k.top++;    //day vao ngan xep k
    89.                                k.data[k.top]=c;
    90.                             }
    91.                     }
    92.                 else
    93.                     { k.top++;        //day vao ngan xep k
    94.                       k.data[k.top]=c;
    95.                     }
    96.              }
    97.          if(c==')')   // neu phat hien dau ) thi ta pop cho toi khi gap dau '(" thi dung
    98.            {
    99.               do
    100.                 {
    101.                     bthuc1[j++]=k.data[k.top];
    102.                     k.top--;
    103.                 }while(k.data[k.top]!='(') ;
    104.            }
    105.        }
    106.    // lay het so toan tu con lai trong stack
    107.    while(!isempty(&k))
    108.      {
    109.         bthuc1[j++]=k.data[k.top];
    110.         k.top--;
    111.      }
    112.    bthuc1[j]='\0';
    113.    printf("bieuthuc:%s",bthuc);
    114.    printf("bieuthuc1:%s",bthuc1);
    115. }

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Sửa lại hàm sau đây xem nào:

    Code:
    int kttoantu(char a)
    {   
        if((a=='+')||(a=='-')||(a=='*')||(a=='/'))  //Edited by Dreaminess
            return (TRUE);
        else
            return (FALSE);
    }
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    1

    thanks Dreaminess nhìu nha! Mình sửa được rồi.Nhưng mình ko hỉu sao chỗ đó lại bị lỗi zậy?

  6. #6
    Ngày gia nhập
    10 2012
    Bài viết
    1

    Mặc định Lỗi segmentation fault (core dumped)

    Code:
    #include "defs.h"
    
    int HP (int );
    int Minimum  (int);
    int NT (int );
    int UCLN (int , int );
    int Round (float );
    int Fibo (int );
    int Count (int );
    
    int calculate(musketeer theMusketeer, int R, int N, int nEvent, int* arrEvent)
    {
    	int nOut = 0;
    	int HPC, MC, Vd;
    	int mainresult = HPC+MC+Vd;
    	if(HPC<=0 || MC<0)
    	{
    		mainresult = -1;
    		return mainresult;
    	}
    	// Write your code here.Please!
    	theMusketeer.HP = theMusketeer.nHealthPoint = HP(theMusketeer.ID);
    	int Value_Green=0, Value_Red=0, H1, H2, P, Mythril=0, Appear=0, Avatar=0, Titan=0, Loop, Kill_Titan=0, arrRed[EVENT_SIZE], arrBlue[EVENT_SIZE];
    	
    	for(int t=1; t<=nEvent; t++)
    	{
    		switch(arrEvent[t]/100)
    		{
    			case 1 : if (theMusketeer.ID == 3)
    				theMusketeer.nGoldCoin = Minimum(theMusketeer.nGoldCoin+arrEvent[t]%100);
    			else
    			{
    				theMusketeer.nBlueDiamonds++;
    				arrBlue[theMusketeer.nBlueDiamonds] = arrEvent[t]%100;
    			}
    				break;
    			case 2 : theMusketeer.nRedDiamonds++;
    				arrRed[theMusketeer.nRedDiamonds] = arrEvent[t]%100;
    				break;
    			case 3 :if (theMusketeer.ID == 3)
    				{
    					if (R>=3 && theMusketeer.nGoldCoin>2)
    					{
    						for (int i=R-1; i>2; i--)
    							if (NT(i) == 1)
    							{
    								P = i;
    								break;
    							}
    						if ((theMusketeer.nHealthPoint+((arrEvent[t]%100)/P)) >= theMusketeer.HP)
    						{
    							theMusketeer.nGoldCoin -= (theMusketeer.HP-theMusketeer.nHealthPoint)/P*P;
    							theMusketeer.nHealthPoint = theMusketeer.HP;
    						}
    						else
    						{
    							theMusketeer.nHealthPoint += (arrEvent[t]%100)/P;
    							theMusketeer.nGoldCoin -= (arrEvent[t]%100)/P*P;
    						}
    					}
    				}
    				else
    				{
    					if ((theMusketeer.nHealthPoint+(arrEvent[t]%100)) >= theMusketeer.HP)
    					{
    						theMusketeer.nGoldCoin -= (theMusketeer.HP-theMusketeer.nHealthPoint);
    						theMusketeer.nHealthPoint = theMusketeer.HP;
    					}
    					else
    					{
    						theMusketeer.nHealthPoint += arrEvent[t]%100;
    						theMusketeer.nGoldCoin -= arrEvent[t]%100;
    					}
    				}
    				break;
    			case 4 : H1 = arrEvent[t]%100 * R;
    				H2 = (theMusketeer.nHealthPoint+H1) % (100+R);
    				if (Avatar == 0)
    					Loop = 1;
    				else
    				{
    					Loop = 2;
    					Avatar = 0;
    				}
    				for (int i=0; i<Loop; i++)
    				{
    					if (theMusketeer.ID == 2 )
    					{
    						if ((NT(H2)==1 && H2>R))
    							if (Mythril == 1)
    								theMusketeer.nHealthPoint -= Round((float)(arrEvent[t]%100)*((float)(R+1)/(float)(2*Count(R)+R)));
    							else
    								theMusketeer.nHealthPoint -= arrEvent[t]%100;
    					}
    					else
    						if (theMusketeer.ID == 3 && Titan != 0)
    							Titan--;
    						else
    						{
    							if (theMusketeer.ID==4 && ((Mythril==1&&theMusketeer.nHealthPoint-Round((float)(arrEvent[t]%100)*(((float)R+1)/(2*(float)R)))<1) || theMusketeer.nHealthPoint-arrEvent[t]%100<1))
    								break;
    							else
    								if (theMusketeer.nHealthPoint >= H1)
    									theMusketeer.nGoldCoin = Minimum(theMusketeer.nGoldCoin + arrEvent[t]%100);
    								else
    								{
    
    									if (H2==0 || theMusketeer.nHealthPoint<H1)
    										if (Mythril == 1)
    											theMusketeer.nHealthPoint -= Round((float)(arrEvent[t]%100)*((float)(R+1)/(float)(2*Count(R)+R)));
    										else
    											theMusketeer.nHealthPoint -= arrEvent[t]%100;
    								}
    						}
    				}
    				break;
    			case 5 : if (Appear == 0)
    				{
    					Appear = 1;
    					H1 = arrEvent[t]%100 * R;
    					H2 = (theMusketeer.nHealthPoint+H1) % (100+R);
    					if (theMusketeer.ID==4 && ((Mythril==1&&theMusketeer.nHealthPoint-Round((float)(arrEvent[t]%100)*(((float)R+1)/(2*(float)R)))<1) || theMusketeer.nHealthPoint-arrEvent[t]%100<1))
    						break;
    					else
    						if (theMusketeer.nHealthPoint>=H1)
    						{
    							if (UCLN(theMusketeer.nBlueDiamonds, theMusketeer.nRedDiamonds) == 1)
    								Mythril = 1;
    							else
    							{
    								if (theMusketeer.ID == 3)
    								{
    									theMusketeer.nRedDiamonds++;
    									arrRed[theMusketeer.nRedDiamonds] = arrEvent[t]%100;
    								}
    								else
    								{
    									theMusketeer.nBlueDiamonds++;
    									arrBlue[theMusketeer.nBlueDiamonds] = arrEvent[t]%100;
    								}
    							}
    						}
    						else
    						{
    							theMusketeer.nGoldCoin /= 2;
    							theMusketeer.nHealthPoint -= arrEvent[t]%100;
    						}
    				}
    				break;
    			case 6 :if (theMusketeer.nBlueDiamonds >= theMusketeer.nRedDiamonds)
    				{
    					if (theMusketeer.nHealthPoint+(arrEvent[t]%100) >= theMusketeer.HP)
    						theMusketeer.nHealthPoint = theMusketeer.HP;
    					else
    						theMusketeer.nHealthPoint += arrEvent[t]%100;
    					Avatar = 0;
    				}
    				else
    					Avatar = 1;
    				break;
    			case 7 : H1 = arrEvent[t]%100 * R;
    				H2 = (theMusketeer.nHealthPoint+H1) % (100+R);
    				if (Avatar == 0)
    					Loop = 1;
    				else
    				{
    					Loop = 2;
    					Avatar = 0;
    				}
    				for (int i=0; i<Loop; i++)
    				{
    					if (theMusketeer.ID==4 && ((Mythril==1&&theMusketeer.nHealthPoint-Round((float)(arrEvent[t]%100)*(((float)R+1)/(2*(float)R)))<1) || theMusketeer.nHealthPoint-arrEvent[t]<1))
    								break;
    					else
    						if (theMusketeer.ID == 3)
    							Titan = 3;
    						else
    							if (H2==0 || theMusketeer.nHealthPoint<H1)
    								if (Mythril == 1)
    									theMusketeer.nHealthPoint -= Round((float)arrEvent[t]*((float)(R+1)/(float)(2*Count(R)+R)));
    								else
    									theMusketeer.nHealthPoint -= arrEvent[t];
    							else
    								Kill_Titan++;
    				}
    				break;
    			case 8 : if (theMusketeer.ID == 1)
    				{
    					mainresult=-1;
    					return mainresult;
    				}
    				else
    				{
    					if (theMusketeer.ID == 2)
    						theMusketeer.nGoldCoin = 999;
    					else
    						if (theMusketeer.nHealthPoint <= 700)
    						{
    							Loop = UCLN (arrEvent[t]%10, (arrEvent[t]%100)/10);
    							if (theMusketeer.ID == 3)
    							{
    								for (int i=0; i<Loop; i++)
    								{
    									arrRed[theMusketeer.nRedDiamonds] = 0;
    									theMusketeer.nRedDiamonds--;
    								}
    							}
    							else
    							{
    								for (int i=0; i<Loop; i++)
    								{
    									arrBlue[theMusketeer.nBlueDiamonds] = 0;
    									theMusketeer.nBlueDiamonds--;
    								}
    							}
    						}
    				}
    				break;
    			case 9 : if (Fibo(t) == 1)
    					{
    						H1 = arrEvent[t]%100 * R;
    						H2 = (theMusketeer.nHealthPoint+H1) % (100+R);
    						if (theMusketeer.nHealthPoint >= H1)
    						{
    							theMusketeer.nHealthPoint = theMusketeer.HP;
    							theMusketeer.nGoldCoin = 999;
    						}
    						else
    						{
    							mainresult=-1;
    							return mainresult;
    						}
    					}
    					else
    					{
    						mainresult=-1;
    						return mainresult;
    					}
    				break;
    		}
    		if (theMusketeer.nHealthPoint <= 0 || theMusketeer.nGoldCoin <= 0)
    		{
    			mainresult=-1;
    			return mainresult;
    		}
    		if (theMusketeer.nRedDiamonds+theMusketeer.nBlueDiamonds == N || Kill_Titan==3)
    		{
    			for (int i=1; i<=theMusketeer.nRedDiamonds; i++) Value_Red += arrRed[i];
    			for (int i=1; i<=theMusketeer.nBlueDiamonds; i++) Value_Green += arrBlue[i];
    			mainresult=theMusketeer.nHealthPoint+theMusketeer.nGoldCoin+Value_Red+Value_Green;
    			return mainresult;
    		}
    	}
    	return nOut;
    }
    
    int HP(int id)
    {
    	if (id == 1)
    		return 999;
    	if (id == 2)
    		return 900;
    	if (id == 3)
    		return 888;
    	else
    		return 777;
    }
    
    int Minimum (int a)
    {
    	if (a>999)
    		return 999;
    	else
    		return a;
    }
    
    int NT (int n)
    {
    	if (n == 2)
    		return 1;
    	for (int i=2; i<n/2; i++)
    		if (n%i == 0)
    			return 0;
    	return 1;
    }
    
    int UCLN (int a, int b)
    {
    	while(a != b)
    	{
    		if (a > b)
    			a -= b;
    		else
    			b -= a;
    	}
    	return a;
    }
    
    int Round (float a)
    {
    	if (((int)(a*10))%10 >= 5)
    		return (int)a+1;
    	else
    		return (int)a;
    }
    
    int Fibo (int n)
    {
    	int a, b, c=1;
    	a = b = c;
    	while (c <= n)
    		if (c == n)
    			return 1;
    		else
    		{
    			c = a+b;
    			a = b;
    			b = c;
    		}
    	return 0;
    }
    
    int Count (int n)
    {
    	if (n<10)
    		return 10;
    	else
    		return Count(n/10)*10;
    }
    Có thể giúp mình bài này đc k, cũng bị lỗi như chủ thread. GV y/cầu là test trên cygwin. Yêu cầu của bài nằm trong file đính kèm.
    Mong được các bạn giúp đỡ sớm vì sắp tới hạn nộp rùi
    Attached Files Attached Files

Các đề tài tương tự

  1. Mã nguồn C Lỗi Lỗi Segmentation fault (core dumped) khi compile
    Gửi bởi thegioi21master trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 23-07-2012, 06:05 PM
  2. Lỗi Segmentation fault (core dumped) trong cygwin do đọc file
    Gửi bởi kydinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 31-05-2012, 10:05 PM
  3. Bài tập C++ Cấp phát động cho mảng con trỏ 2 chiều. Lỗi core dumped
    Gửi bởi b3cks trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 30-08-2011, 12:48 AM
  4. lỗi segmentation fault bài về xâu kí tự
    Gửi bởi pentest trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 45
    Bài viết cuối: 07-05-2011, 07:24 PM
  5. Kỹ thuật C Lỗi segmentation fault xảy ra khi nào ?
    Gửi bởi nmt1402 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 01-04-2011, 05:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn