C++ 我的应用程序正在使用Do/While循环解析表时崩溃

C++ 我的应用程序正在使用Do/While循环解析表时崩溃,c++,arrays,qt,crash,do-while,C++,Arrays,Qt,Crash,Do While,我有2个QCheckbox表,每个表包含11个元素。 我在课堂上声明如下: QCheckBox *sectionTable[10]; QCheckBox *postTable[10]; 对于每个QCheckBox,我都这样做 QCheckBox* checkboxA = new QCheckBox("A"); sectionTable[0] = checkboxA; 通过我的测试方法,我想返回QCheckbox表中每个元素的内容。 为此,我做了以下测试: /** TEST() **/ voi

我有2个QCheckbox表,每个表包含11个元素。 我在课堂上声明如下:

QCheckBox *sectionTable[10];
QCheckBox *postTable[10];
对于每个QCheckBox,我都这样做

QCheckBox* checkboxA = new QCheckBox("A");
sectionTable[0] = checkboxA;
通过我的测试方法,我想返回QCheckbox表中每个元素的内容。 为此,我做了以下测试:

/** TEST() **/
void VGCCC::test()
{
    sectionTable[0]->setText("A");
    sectionTable[1]->setText("B");
    sectionTable[2]->setText("C");
    sectionTable[3]->setText("D");
    postTable[0]->setText("E");
    postTable[1]->setText("F");
    postTable[2]->setText("G");
    postTable[3]->setText("H");

    int i=0;
    do
    {
        m_testTextEdit->insertPlainText(sectionTable[i]->text());
        std::cout << "SECTION TABLE " << sectionTable[i]->text().toStdString() << "\n" << std::endl;
        i++;
    }
    while(!sectionTable[i]->text().isNull());

    do
    {
        m_testTextEdit->insertPlainText(postTable[i]->text());
        std::cout << "POST TABLE " << postTable[i]->text().toStdString() << "\n" << std::endl;
        i++;
    }
    while(!postTable[i]->text().isEmpty());
}
/**测试()**/
void VGCCC::test()
{
截面表[0]->setText(“A”);
截面表[1]->setText(“B”);
截面表[2]->setText(“C”);
截面表[3]->setText(“D”);
postTable[0]->setText(“E”);
postTable[1]->setText(“F”);
postTable[2]->setText(“G”);
postTable[3]->setText(“H”);
int i=0;
做
{
m_testTextEdit->insertPlainText(sectionTable[i]->text());
std::cout text());

std::cout关于11个元素:
QCheckBox*sectionTable[10];
仅为元素定义10个插槽(0到9)

int i=0;
do
{
    m_testTextEdit->insertPlainText(sectionTable[i]->text());
    std::cout << "SECTION TABLE " << sectionTable[i]->text().toStdString() << "\n" << std::endl;
    i++;
}
while(!sectionTable[i]->text().isNull());

此循环在退出条件下的错误与
sectionTable
循环相同。

关于11个元素:
QCheckBox*sectionTable[10];
仅为元素定义10个插槽(0到9)

int i=0;
do
{
    m_testTextEdit->insertPlainText(sectionTable[i]->text());
    std::cout << "SECTION TABLE " << sectionTable[i]->text().toStdString() << "\n" << std::endl;
    i++;
}
while(!sectionTable[i]->text().isNull());

此循环在退出条件中的错误与
sectionTable
循环相同。

我找到了解决问题的方法。正如前面的回答(@user4581301)中所述,我没有将迭代器I设置为0。 另外,为了避免“超出范围”崩溃,我设置了第二个条件,即
iinsertPlainText(sectionTable[I]->text());

std::cout我找到了解决问题的方法。正如前面的回答(@user4581301)中所说,我没有将迭代器I设置为0。 另外,为了避免“超出范围”崩溃,我设置了第二个条件,即
iinsertPlainText(sectionTable[I]->text());

std::可能没有提供足够的代码来确定答案,但
QCheckBox*sectionTable[10];
将指针数组分配给
QCheckBox
sectionTable[0]->setText(“a”)
尝试使用分配给其中一个指针的
QCheckBox
,但您是否创建并分配过
QCheckBox
?该代码缺失。@user4581301我分配QCheckBox如下:
QCheckBox*checkboxA=new QCheckBox(“a”);sectionTable[0]=checkboxA;
。我必须确定我的表可以包含11个QCheckbox元素,但我没有完全按照目的填充它。没有提供足够的代码来确定答案,但是
QCheckbox*sectionTable[10];
QCheckbox
sectionTable[0]->setText(“a”)分配一个指针数组
尝试使用分配给其中一个指针的
QCheckBox
,但您是否创建并分配过
QCheckBox
?该代码缺失。@user4581301我分配QCheckBox如下:
QCheckBox*checkboxA=new QCheckBox(“a”);sectionTable[0]=checkboxA;
。我必须确定我的表可以包含11个QCheckbox元素,但我并没有完全出于目的填充它。危险:
sizeof(sectionTable[I])
将返回
sectionTable
中一个元素的大小。索引并不重要,因为所有元素的大小都相同。因为这是一个指针,大小将是指针的大小(可能是4或8),而不是数组中元素的计数。要获取元素计数,需要
sizeof(sectionTable)/sizeof(sectionTable[0])
。从工程角度定义
QCheckBox*sectionTable[SIZE\u OF_TABLE];
然后
while(!sectionTable[i]->text().isNull()&&iDanger:
sizeof(sectionTable[i])
将返回
sectionTable
中一个元素的大小。索引并不重要,因为所有元素的大小都相同。因为这是一个指针,大小将是指针的大小(可能是4或8),而不是数组中元素的计数。要获取元素计数,需要
sizeof(sectionTable)/sizeof(sectionTable[0])
。从工程角度定义
QCheckBox*sectionTable[SIZE_OF_TABLE];
然后
while(!sectionTable[i]->text().isNull()&&i
/** TEST() **/
void VGCCC::test()
{
    int i = 0;
    do
    {
        m_testTextEdit->insertPlainText(sectionTable[i]->text());
        std::cout << "SECTION TABLE " << m_materialMap[sectionTable[i]].c_str() << "\n" << std::endl;
        i++;
    }
    while(!sectionTable[i]->text().isNull() && i<sizeof(sectionTable[i]));

    i = 0;
    do
    {
        m_testTextEdit->insertPlainText(postTable[i]->text());
        std::cout << "POST TABLE " << postTable[i]->text().toStdString() << "\n" << std::endl;
        std::cout << "POST TABLE " << m_materialMap[postTable[i]].c_str() << "\n" << std::endl;
        i++;
    }
    while(!postTable[i]->text().isEmpty() && i<sizeof(postTable[i]));
}