我有一个数组的长度,和两个浮点动态数组。
int arraysizeX_right_ref = 0;
float* X_right_ref = 0;
float* Y_right_ref = 0;
int tolerance = 19;
grabResult.SizeX = 1440
grabResult.SizeY = 1080
我有这个代码下面在一个双循环。当变量arraysizeX_right_ref
达到值303时,第一行给出错误:Unhandled exception at 0x00007FF68598FBEF in SimpleGrab.exe: 0xC0000005: Access violation reading location 0x0000014DAA644000
for (l = 845 + tolerance+1; l < grabResult.SizeX; l++) {
for (j = grabResult.SizeY; j > -1; j--) {
if (*(img + j * grabResult.SizeX + l) == 0) {
X_right_ref = realloc(X_right_ref, ++arraysizeX_right_ref * sizeof(*X_right_ref));
Y_right_ref = realloc(Y_right_ref, arraysizeX_right_ref * sizeof(*Y_right_ref));
X_right_ref[arraysizeX_right_ref - 1] = l;
Y_right_ref[arraysizeX_right_ref - 1] = j;
break;
}
}
}
我猜测它甚至在递增++arraySizeX_right_ref
之前就停止了,因为X_right_ref[302]
,也就是X_right_ref[303-1]
有一个可预期的值(Y_right_ref[302]
也是如此)。
发生什么事了?
PS:我可能已经诱导大家在一个错误(?),不确定。在VisualStudio中,错误符号实际上出现在if
的前面,就在这些重新分配之前。现在我猜问题是访问***img
。**
1条答案
按热度按时间bzzcjhmw1#
1.请使用正确的型号。
1.检查
realloc
是否未发生故障。您需要使用临时指针。1.++函数调用中的一些东西看起来很酷,但很难阅读,而且容易出错。不要保存键盘。人们过去常常保存纸张(40年前),因为所有的程序都打印在纸上,数字行可能很重要。
https://godbolt.org/z/os6eTqbn6