讓我開始說我知道這是一種很時髦的編程方式,但我的老師要求我們這樣做。動態分配內存給結構數組C++
另請參見: 我CANT使用std :: string,類,此項目的構造函數。 我需要使用這種陳舊的C風格字符串方法,並在結構外部發生動態內存分配..我知道它不是最好的方式去做這件事,但是我可以去。 :(
進出口套牢的結構,我找不出什麼錯..
我有一個結構
#include <iostream>
#include <fstream>
#include <ctime>
#include <stdlib.h>
#include <string>
using namespace std;
//global constant(s)
const int maxCards = 52;
//Structs
struct card
{
char *suit;
char *rank;
int cvalue;
char location;
};
//Function List
void readPlayers(player *peoplePointer);
void shuffleCards(card *unshuffled, card* shuffled);
//program
int main()
{
//create pointer and set initial value
card * deckPointer = new card[52];
card *deckHome = &deckPointer[0];
for(int i=0;i<maxCards;i++)
{
(*deckPointer).suit=new char[8];
(*deckPointer).rank = new char[7];
deckPointer++;
}
deckPointer = deckHome;
cardInit(deckPointer);
readDeck(deckPointer);
//sets default values for the card arrays
for(int i=0;i<52;i++)
{
strcopy((*deckPointer).suit,"suit");
strcopy((*deckPointer).rank,"rank");
(*deckPointer).cvalue = 0;
deckPointer++;
}
deckPointer = deckHome;
return 0;
}
//Functions
void cardInit(card *deckPointer)
{
card * deckHome = NULL;
deckHome = &deckPointer[0];
//set up card file to be read in
ifstream fin;
char *finName = new char[13];
//get file name from user
cout << "Enter file name...(cardFile.txt)" << endl;;
cin >> *finName;
//open the file
fin.open(finName);
//check if cardFile.txt opens correctly
if(!fin.good())
{
cout << "Error with card file" << endl;
}
else
{
deckPointer = deckHome;
while(fin.good())
{
for(int i=0;i<50;i++)
{
fin >> (*deckPointer).suit;
fin >> (*deckPointer).rank;
fin >> (*deckPointer).cvalue;
deckPointer++;
}
}
}
delete [] finName;
}
//Its a pretty simple program..and my dynamic memory works for
//the file name, but I cant figure out why it doesnt work for structs?
請發佈一個完整的但減少到最小的例子。真實的代碼。並解釋問題。 – 2014-09-24 18:49:49
你不應該動態分配你不需要動態分配的東西。例如'(* deckPtr).suit = new char [8]'和'(* deckPtr).rank = new char [7]'。縮進也使得閱讀代碼變得非常困難。 – Jason 2014-09-24 18:53:14
使用變量名稱,告訴您是否有指向卡組的指針或指向卡的指針。我想你在混合起來。我會有一個甲板指針,然後像迭代器一樣使用卡片指針。 – 2014-09-24 18:59:43