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


questionanswer是局部变量。不仅如此,您还可以分配内存并将返回的指针分配给这些局部变量。当该函数退出时,这些本地变量将消失,加上重新分配您分配的内存的任何机会也会随之消失,从而导致内存泄漏。

在执行其他操作之前,为什么要使用new[]而不是std::string?您将其标记为C ++,但所有编码均为“ C”。

关于c++ - 初始化obj,然后传递给函数<bad ptr>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23439369/

10-11 23:12
查看更多