Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[C++]關於兩個object共用記憶體空間的問題?

0 views
Skip to first unread message

捐錢救台灣

unread,
Mar 21, 2002, 6:00:37 AM3/21/02
to
各位好,小弟在實做時遇到個大問題,一直想不通如何解決,不知道高手可否
幫忙釋疑一番:

我有兩個class A,B,且A,B兩個class分別放在兩個檔案,其定義如下。
我主要的問題是:
如何在class B產生的object存取到class A產生的object中的data變數?
我的寫法如下所示,但在class B的print_data()中,一旦這樣列印就會發生
記憶體違反存取的錯誤訊息,原因我想應該是class B的 **data並不會知道其所指向的
大小,因此發生錯誤。

不知道在現有class定義架構下,該怎麼寫才可正確的讓b object可以存取到
class A的 char data[100][50]資料?

//A.CPP

class A
{
public :
char data[100][50];
void fun();
}

A::fun()
{
B *b;
b=new B();
.... //將data塞入資料
....
b->data=(char **)data;


}
-------------------------

class B
{
public :
char **data;
void print_data();

}
B::print_data()
{
printf("%s",data[0]);
}


--
[1;32m※ Origin: [33m交大資工鳳凰城資訊站 [37m<bbs.csie.nctu.edu.tw> [m
[1;31m◆ From: [36multra1.cs.ccu.edu.tw [m

小豆豆

unread,
Mar 22, 2002, 10:59:40 PM3/22/02
to
※ 引述《scwe...@bbs.csie.nctu.edu.tw (捐錢救台灣)》之銘言:

> 如何在class B產生的object存取到class A產生的object中的data變數?
> 我的寫法如下所示,但在class B的print_data()中,一旦這樣列印就會發生
> 記憶體違反存取的錯誤訊息,原因我想應該是class B的 **data並不會知道其所指向的
> 大小,因此發生錯誤。

> b->data=(char **)data;

這是一個嚴重的錯誤,char**並不等於char[][]
你用強制轉型,雖然可以通過編譯器,卻造成錯誤出現在執行時期

char[][]是一塊連續的的記憶體,編譯器會幫你計算offset
因為,編譯器可以知道每個維度的大小,而char**是一個指
向指標的指標

char buf[100][50]; // buf is 0x0012ebf8
strcpy(buf[0], "C++"); // copy string buf[0] = {0x43, 0x2B, 0x2B, 0x00}
char** p1 = (char**)buf; // p1 is 0x0012ebf8
char* p2 = p1[0]; // p2 is 0x002b2b43

這樣應該能理解,不行再問吧!
--
[1;32m┌───── [33m◆ [37mKKCITY [33m◆ [32m─────┐ [34m┐┌┐┐┌┐┌─┐┌┬┐┌┬┐┐ ┌ [m
[1;32m│ [31m bbs.kkcity.com.tw [32m│ [37m├┘┐├┘┐│ │ │ └┬┘ [m
[1;32m└── [34m《 [0;37mFrom:61.223.76.27 [1;34m》 [32m──┘ [36m┘ ┘┘ ┘└─┘└┴┘ ┴ ┴ [m

0 new messages