在我的程序中,我有一个全局结构:
struct card{
char* action;
// and other irrelevant members
};
以及将每张卡初始化为默认值的函数:
void initializeCard(card* cards){
char* charPtr;
(*cards).action = new char[9];
charPtr = (*cards).action;
*charPtr = 'a';
charPtr++;
*charPtr = 'c';
charPtr++;
*charPtr = 't';
charPtr++;
*charPtr = 'i';
charPtr++;
*charPtr = 'o';
charPtr++;
*charPtr = 'n';
charPtr++;
*charPtr = '\0';
// so on for other members
}
在 main 中,为未洗牌的“纸牌”调用初始化函数:
card* unshuffled = new card[108];
for(int i=0;i<108;i++, unshuffled++){
initializeCard(unshuffled);
}
稍后,我试图用从文件中引入的字符串覆盖数组中卡片的“动作”字符串(该文件是有效的;我自己编写的)。传入的字符串最多为 8 个字符,因此它将适合已分配的操作数组。
fin >> temp;
stringCopy((*cards).action, temp); // <---- this is where I get the seg fault
StringCopy 是我自己的版本是 strcpy,它只是逐个字符地复制到空字符并包括空字符。我已经测试过它可以正常工作。
为什么我会出现段错误?
另外,不要质疑我为什么要这样做;我正在为一个类执行此操作,并且必须使用动态分配的内存,必须编写我自己的字符串库函数,不能使用向量、箭头运算符或重载运算符。