我正在尝试使用 bitmap_image.hpp 库从 .bmp 图像获取单色图像。但在一个地方(Pic[i][j] = 0.3 * r + 0.59 * g + 0.11 * b;)我收到该错误:PicCircle.exe 中 0x0019BD8F 处未处理的异常:0xC0000005:访问冲突写入位置 0x011CF000。 。那么,这有什么问题吗?
代码:
#define _SCL_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "bitmap_image.hpp"
#define C 0.01
double** ArrayCreate ( int M, int N )
{
int i;
double** ArrayRoot;
ArrayRoot = (double **)malloc(sizeof(double*) * M);
for (i = 0; i < M; i++)
ArrayRoot[i] = (double *)malloc(sizeof(double) * N);
return ArrayRoot;
}
void ArrayDestroy ( double** Array , int M)
{
int i;
for (i = 0; i < M; i++){
Array[i] = (double *)realloc(Array[i], 0);
};
Array = (double **)realloc(Array, 0);
}
void main ( void )
{
double** Pic;
unsigned char r, g, b;
int H, W, i, j;
bitmap_image image("m1.bmp");
H = image.height();
W = image.width();
Pic = ArrayCreate(H, W);
for (i = 0; i < W; i++)
for (j = 0; j < H; j++)
{
image.get_pixel(i, j, r, g, b);
Pic[i][j] = 0.3 * r + 0.59 * g + 0.11 * b;
}
for (i = 0; i < W; i++)
for (j = 0; j < H; j++)
{
if (abs(sqrt(pow(Pic[i + 1][j] - Pic[i][j], 2) + pow(Pic[i][j + 1] - Pic[i][j], 2))) >= C)
Pic[i][j] = 1;
else
Pic[i][j] = 0;
}
ArrayDestroy(Pic, H);
}
最佳答案
在第一个循环中,您以 Pic[width][height]
的形式访问 Pic
数组,但在第二个循环中,您以 Pic[height] 的形式访问它][宽度]
。
这两个中的一个不正确,可能是第一个。
修复 for
循环应该可以解决问题。
关于c - 访问冲突写入位置 0x011CF000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146043/