我正在尝试初始化一个对象的值,然后将其传递给一个函数,但是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;
}
感谢您的帮助!
如果您需要更多信息,请告诉我。
编辑:问题是我正在用构造函数重新声明两个变量。我的语法错误!
最佳答案
一个大问题:这段代码除了导致内存泄漏外,什么也不做:
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”。关于c++ - 初始化obj,然后传递给函数<bad ptr>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23439369/