我正在尝试初始化一个对象的值,然后将它传递给一个函数,但是visual studio告诉我,我的对象里面的两个变量(问题和答案)都有“坏指针”,不能评估。不幸的是,我需要稍后访问它们。
我在调用enqueue()之前尝试显示问题[i]并回答[i],并且它正确地回应。
就好像当我调用enqueue()函数时,它不记得我在之前调用构造函数时给卡对象的值。
我不确定为什么我的代码会在这里中断,我是否需要制作动态对象?
card::card(char *q_input, char *a_input)
{
char * question = new char [75];
char * answer = new char [25];
strncpy(question,q_input,strlen(q_input)+1);
strncpy(answer,a_input,strlen(a_input)+1);
}
...
int queue::fill_deck(char **question, char **answer)
{
for(int i = 0; i < 9; i++)
{
card Card(question[i],answer[i]);
enqueue(Card); //ERROR!
}
return 0;
}
感谢您的帮助!
如果您需要更多信息,请与我们联系。
编辑:问题是我用构造函数重新声明了两个变量。我的语法错误!
答案 0 :(得分:1)
一个大问题:此代码除了导致内存泄漏外什么都不做:
card::card(char *q_input, char *a_input)
{
char * question = new char [75];
char * answer = new char [25];
strncpy(question,q_input,strlen(q_input)+1);
strncpy(answer,a_input,strlen(a_input)+1);
}
question
和answer
是局部变量。不仅如此,您还可以分配内存并将返回的指针分配给这些局部变量。当该函数退出时,那些本地人会消失,再加上释放你分配的内存的机会随之消失,导致内存泄漏。
在做其他事情之前,为什么要使用new[]
代替std::string
?你把它标记为C ++,但你的所有编码都是'C'。