初始化obj然后传入函数<bad ptr =“”> </bad>

时间:2014-05-03 01:50:31

标签: c++ visual-studio-2010

我正在尝试初始化一个对象的值,然后将它传递给一个函数,但是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;
}

感谢您的帮助!

如果您需要更多信息,请与我们联系。

编辑:问题是我用构造函数重新声明了两个变量。我的语法错误!

1 个答案:

答案 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);
}

questionanswer是局部变量。不仅如此,您还可以分配内存并将返回的指针分配给这些局部变量。当该函数退出时,那些本地人会消失,再加上释放你分配的内存的机会随之消失,导致内存泄漏。

在做其他事情之前,为什么要使用new[]代替std::string?你把它标记为C ++,但你的所有编码都是'C'。