c - 访问冲突写入位置 0x011CF000

标签 c bmp

我正在尝试使用 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/

相关文章:

c++ - 从 RGB 值数组生成 BMP 文件

java - 如何读取 .bmp 文件识别 Java 中哪些像素为黑色

c - BMP文件C实现

java - 使用 ImageIO 编写透明的 BMP

c - 难以将结构传递给函数

c - C语言整数运算的中间结果用什么精度?

我们可以将相同的寄存器地址映射到MODBUS TCP IP中的多个从站吗

c - 我如何在 C 中使用 kbhit?

来自数据库的 Java bmp

c - 为什么 Linux 内核模块中定义的 mmap 返回 MAP_FAILED?