错误的编译器代码生成或某些内存损坏?
Faulty compiler code generation or some memory corruption?
我在我的 C++ 项目中使用 C
库。这是我第一次遇到这样的问题。我在 C
库中有这样一个 struct
:
typedef struct {
size_t count;
int items[];
} items_list;
然后我这样做:
items_list* itemsList = get_item_list_lib(...);
if(itemsList != NULL)
{
qDebug()<<"ItemCount: "<<itemsList->count;
for(int i = 0; i = itemsList->count; i++)
{
qDebug()<<itemsList->items[i];
}
}
当我在 if(itemsList != NULL)
处中断时,我可以看到有计数等于 20
。 qDebug()
也打印 ItemCount: 20
。然后一旦它进入循环,不再有断点,无论我把它们放在哪里,它都会无限地打印 itemsList->items[i]
的值。我以前从未听说过这样的问题,有人知道吗?在调试和发布模式下都会发生。
逻辑错误。试试这个:
items_list* itemsList = get_item_list_lib(...);
if(itemsList != NULL)
{
qDebug()<<"ItemCount: "<<itemsList->count;
for(int i = 0; i < itemsList->count; i++) // NOTE: less than, not equals
{
qDebug()<<itemsList->items[i];
}
}
我在我的 C++ 项目中使用 C
库。这是我第一次遇到这样的问题。我在 C
库中有这样一个 struct
:
typedef struct {
size_t count;
int items[];
} items_list;
然后我这样做:
items_list* itemsList = get_item_list_lib(...);
if(itemsList != NULL)
{
qDebug()<<"ItemCount: "<<itemsList->count;
for(int i = 0; i = itemsList->count; i++)
{
qDebug()<<itemsList->items[i];
}
}
当我在 if(itemsList != NULL)
处中断时,我可以看到有计数等于 20
。 qDebug()
也打印 ItemCount: 20
。然后一旦它进入循环,不再有断点,无论我把它们放在哪里,它都会无限地打印 itemsList->items[i]
的值。我以前从未听说过这样的问题,有人知道吗?在调试和发布模式下都会发生。
逻辑错误。试试这个:
items_list* itemsList = get_item_list_lib(...);
if(itemsList != NULL)
{
qDebug()<<"ItemCount: "<<itemsList->count;
for(int i = 0; i < itemsList->count; i++) // NOTE: less than, not equals
{
qDebug()<<itemsList->items[i];
}
}