作者b2305911 (Howard)
看板C_and_CPP
標題Re: [問題] Segmentation fault
時間Sun Apr 3 17:05:36 2011
※ 引述《b2305911 (Howard)》之銘言:
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux(編譯器不知道)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
問題(Question):
寫大數運算 目前只做到資料的input和output 尚未寫好運算
作業要求將所有運算時需要的function都放在class裡
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
Segmentation fault
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
class BigNum
{
public:
//constructor
BigNum()
{
cur_ptr=new char[100];
in_ptr=new char[100];
}
//add
void Add(const char* ch)
{
}
//functional
void set(const char* ch)
{
if(strlen(ch)>100)
{
delete cur_ptr;
cur_ptr=new char[2*strlen(ch)];
cur_ptr=strcpy(cur_ptr,ch);
}
else
{
strcpy(cur_ptr,ch);
}
}
void set()
{
delete cur_ptr;
cur_ptr=new char[2];
//改過之後的
char setZero[]={'0'};
strcpy(cur_ptr,setZero);
}
char* show()
{
return cur_ptr;
}
//destructor
~BigNum()
{
delete cur_ptr;
delete in_ptr;
}
private:
char *cur_ptr,*in_ptr;
int *a_ptr,*b_ptr,*c_ptr;
};
int main(void)
{
BigNum X;
X.set("96325874123654");
cout << X.show() << endl;
X.set();
cout << X.show() << endl;
return 0;
}
補充說明(Supplement):
改過之後linux上可以編譯了
但最後output出來
0的後面會多一個問號 總覺得怪怪的
請問是哪裡還有問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.92.21
→ james732:在 void set(),改成 delete cur_ptr; cur_ptr = NULL; 04/03 16:36
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.92.21
※ 編輯: b2305911 來自: 140.113.92.21 (04/03 17:10)
推 LPH66:char setZero[] = {'0'}; 只會宣告出含一個元素的陣列 04/03 17:10
→ LPH66:所以 strcpy 可能存取到不該存取的記憶體 04/03 17:10
→ b2305911:所以...該如何處置?? 04/03 17:17
→ james732:strcpy(cur_ptr, "0"); 這是一種辦法,把setZero兩行拿掉 04/03 17:18
→ b2305911:終於過了 謝謝 04/03 17:20