gpt4 book ai didi

c++ - 将二维矩阵的值分配给变量

转载 作者:行者123 更新时间:2023-11-28 08:23:14 25 4
gpt4 key购买 nike

我有一个未排序的 3x3 矩阵。

按升序或降序对 3x3 矩阵进行排序后,我想将中值存储在整数变量 (int med) 中。

因为我的矩阵有奇数个元素,我知道每次中值都是matrix[1][1],所以我基本上是这样写的:

int med = matrix[1][1];

虽然我在运行中位数应用程序时在 Visual Studio 中没有遇到编译时错误,但我遇到了以下运行时错误:

"#2 run time check failure..the stack around variable matrix[][] is corrupted..

代码如下:

#include "stdafx.h"
#include <math.h>
#include <mtip.h>
#define MAX 3

int medianfilter_MIF(HMTIPMOD hMod ,Dataset_byte *in,Dataset_byte **out,int th)
{
if(!in)
{
mmsg_ReportError("Missing input!");
return MRV_FAILURE;
}

*out = (Dataset_byte*)md_DatasetClone((Dataset*)in, DST_SAME);
if(!*out)
{
mmsg_ReportError("Could not clone image!");
return MRV_FAILURE;
}


BYTE *pin = DATA_PTR(in);
BYTE *pout = DATA_PTR(*out);
int d_w = NX(in);
int d_h = NY(in);
int mask2d_int[MAX][MAX];
int *element;
int temp;

for (int i = 1; i < d_w - 1; i++){
for (int j = 1; j < d_h - 1; j++){
int temp = VAL2(in,i,j);
mmsg_ReportError("the value of temp is: %d ",temp);
for (int p = i - 1; p < i + 2; p++){
for (int q = j - 1; q < j + 2; q++){
mask2d_int[p][q]=VAL2(in,p,q);
mmsg_ReportError("the value of mask2d_int[p][q] : %d ",mask2d_int[p][q]);
}
}


for (element = &mask2d_int[0][0]; element <= &mask2d_int[MAX-1][MAX-1]; element ++) {
if (*element > *(element + 1)) {
*element ^= *(element + 1); /* exclusive or swap */
*(element + 1) ^= *element;
*element ^= *(element + 1);
}
msg_ReportError("the value of element after swapping is %d ",element);
}
int med = mask2d_int[1][1];
mmsg_ReportError("the value of median is: %d ",med);
if ((temp - med) < th){
*pout = temp;
mmsg_ReportError("the value of *pout before is %d ",*pout);
}
else{
*pout = med;
mmsg_ReportError("the value of *pout after is %d ",*pout);
}
++pout;
}
}
return MRV_SUCCESS;
}


int medianfilter_MDF(HMTIPMOD hMod)
{
INPUT_DATASET("Input image", 0, 0, DST_BYTE, CONN_REQUIRED);
OUTPUT_DATASET("Output image", 0, 0, DST_BYTE, 0);
CONTROL_INT_SLIDER("threshold:",30,0,255);
return MRV_SUCCESS;
}

REGISTER_MTIP_MODULE("Median Filter", medianfilter_MDF, medianfilter_MIF, 0, 0, 0);

最佳答案

看看

for (element = &mask2d_int[0][0]; element <= &mask2d_int[MAX-1][MAX-1]; element ++) {
^^
if (*element > *(element + 1)) {
^^^^^^^^^^^

你循环 while element <= &mask2d_int[MAX-1][MAX-1]这意味着元素运行到并包括最后一个 int,然后您将其与“下一个”int(不存在)进行比较,并可能交换。

多维数组之后的字节包含一个由编译器放置的“神奇值”(可能生成调试版本)。将数组中的最后一个 int 与数组中的字节交换该值后的字节,导致您看到的错误。

将 for 循环更改为

for (element = &mask2d_int[0][0]; element < &mask2d_int[MAX-1][MAX-1]; element ++) {
^

应该可以解决问题。

如果你想要的只是让它工作 - 那么我已经说过了 - 但我注意到你对矩阵进行排序的唯一原因是获得中位数,并且你已经将这个问题标记为“c++”意味着如果您有兴趣,有一些更简单的方法可以做到这一点。

关于c++ - 将二维矩阵的值分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com