Solved program crashes after assigning values to array elements
-
@rezaMSLM said in program crashes after assigning values to array elements:
it doesn't crash in debug mode
only in release mode crashes!Strong sign for something wrong in your code.
You probably overwrite some memory.
Did you check that rowscount is <= 20?Is there a reason why you have AddressList struct and why it is in public section?
-
if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/*if cell is not empty && rowscount <= 20*/
I added rowscount check to the code
problem exists@jsulm said in program crashes after assigning values to array elements:
Is there a reason why you have AddressList struct and why it is in public section?
no there is not special reason. is it unusual?
-
@rezaMSLM said in program crashes after assigning values to array elements:
if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/if cell is not empty && rowscount <= 20/
that is wrong, your array goes from 0 - 19, 20 is an invalid access
-
@rezaMSLM said in program crashes after assigning values to array elements:
no there is not special reason. is it unusual?
I just don't see the point to have a struct containing an array and nothing else.
And everything not needed outside the class should be inside private section (information hiding).
Why not just declareprivate: int m_address[20][2];
?
Back to the crash: what is it? Is it SIGSEGV? Or something else? -
@jsulm said in program crashes after assigning values to array elements:
I just don't see the point to have a struct containing an array and nothing else.
I'm planning to put and use some variables to the structure after solving this issue.
@jsulm said in program crashes after assigning values to array elements:
what is it? Is it SIGSEGV? Or something else?
how to know that?
-
@rezaMSLM Start your app and when it crashes see what is printed in the console.
-
The program has unexpectedly finished. The process was ended forcefully. D:/Projects/Qt_ProjectFolder/build-Meter_Config-Desktop_Qt_5_9_6_MinGW_32bit-Release/release/Meter_Config.exe crashed.
-
-
@jsulm said in program crashes after assigning values to array elements:
yes
if rowscount = 20 in for loop i have:for(int i = 0; i < count; i++){
meaning that maximum i = 19
although that is for safe side.
the number of rows in my tests is less than 10 -
@rezaMSLM To be sure: if on_pushButton_apply_clicked() is not executed there is no crash?
If so what happens if you comment outm_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();
?
And do you use m_address.WaterMeterIDs somewhere else? -
@rezaMSLM Do you have any pointer or member variable that doesn't have a default value. It doesn't crash in "Debug" mode because Debug mode initializes a few things and release mode doesn't. Hope this helps you in figuring out what is wrong :)
-
@jsulm said in program crashes after assigning values to array elements:
what happens if you comment out
m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();if comment this, will not crash
@jsulm said in program crashes after assigning values to array elements:
And do you use m_address.WaterMeterIDs somewhere else?
no
-
@rezaMSLM Well, then the only idea I have is that you're writing outside of the array boundaries.
-
@rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();
qDebug() << i << j;
-
@Maaz-Momin said in program crashes after assigning values to array elements:
Do you have any pointer or member variable that doesn't have a default value
only WaterMeterIDs[20][2] has not initial value
-
@Maaz-Momin said in program crashes after assigning values to array elements:
@rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();
qDebug() << i << j;
added it.
the log is correct
and then crashes with one click anywhere -
@rezaMSLM can you make a minimal compileable example, so that we could test it?
-
@rezaMSLM I now believe the issue is different here. As you say, you resize or click... That means a paint is called. I guess your table index or a pointer is getting invalid. Can only understand after looking into code, can you share it?
-
@Maaz-Momin said in program crashes after assigning values to array elements:
@rezaMSLM I now believe the issue is different here. As you say, you resize or click... That means a paint is called. I guess your table index or a pointer is getting invalid. Can only understand after looking into code, can you share it?
@J.Hilk said in program crashes after assigning values to array elements:
can you make a minimal compileable example, so that we could test it?
yes
I will make a minimal compilable example and share it -
https://ufile.io/g2azi
I built a minimal compilable example that only read table cells and put them in array elements.
it doesn't crashes!
so I uploaded my current crashing program.
after run choose setaddres from parameters menu and then set number of rows with spinbox and click set button
then fill cells and then click apply.
if for first time program didn't crashed close it and re run