2012-10-03 139 views
-1

我需要從我的C++代碼中刪除所有引用,並且由於純C的知識是相當古老的,這就是爲什麼我想問你的意見。 你有這樣的方式與內存分配有任何疑問?:內存分配函數內指針指針

void myallocator2(int** mystr, int* howmany) 
{ 
    *howmany = 40; 
    *mystr = (int*)malloc((*howmany) * sizeof(int)); 
    for(int i=0;i<*howmany;++i) 
     (*mystr)[i] = i*2; 
} 

    int** mystr; 
    int* howmany = new int(); 
    *howmany = 0; 
    myallocator2(mystr,howmany); 
    for(int i=0;i<*howmany;++i) 
     do something (*mystr)[i] 
+0

爲什麼你需要刪除所有的引用?還有,爲什麼你傳遞一個指向'howmany'的指針,然後將其設置爲任意數字?我假設你真的只想傳入一個int,而不是一個指向int的指針。 C中的 – Benj

+0

你沒有引用,並且代碼必須是100%C兼容的。變量「howmany」可以被函數返回,但是我想盡可能地從舊代碼中保存。原始方法是: void myallocator2(A *&mystr,int&howmany) – zuko

回答

0

如果你想要去一個安全的方式,使用共享指針

2

這裏是你的代碼的C++版本。沒有煩人的動態分配。

class A 
{ 
public: 
    int a_; 
}; 

void myallocator2(std::vector<A>& mystr, int& howmany) 
{ 
    howmany = 40; 
    mystr.clear(); 
    mystr.reserve(howmany); 
    for(int i=0;i<howmany;++i) 
     mystr[i].a_ = i*2; 
} 

std::vector<A> mystr; 
int howmany = 0; 
myallocator2(mystr,howmany); 
for(int i=0;i<howmany;++i) 
    do something mystr[i].a_; 

聲明 - 是的,我選擇忽略「我需要從我的C++代碼中刪除所有引用」。除非你給我們一些清晰,深思熟慮的動機,否則這只是一個愚蠢的要求。

+0

我不需要C++版本,此代碼必須是純C – zuko

+0

@zuko爲什麼你要爲它標記C++呢? –

+1

@ zuko也,你知道C中沒有'new',對吧?也不''''。 –