c - 如何检测C二维数组的溢出?

标签 c arrays matrix

我有一个像这样的二维数组:

[1][0][3]
[0][2][0]
[1][0][0]

我应该分析每个位置周围是否有“0”,并获取该位置。之后,我必须用其他数字来完成这个位置。问题是,如何检测我正在分析的位置是否不存在,即是否溢出?我知道 C 没有边界检查,但必须有一种方法来检查该位置。

最佳答案

您需要使用 GNU Scientific Librгy 或使用 get/set 函数实现 2dimm 数组。像这样的事情:

    #include <stdio.h>
    #include <assert.h>
    #include<stdlib.h>

    struct Arr {
        double* arr;
        int max_x;
        int max_y;
    } typedef Arr;

    Arr* Arr_new(int x, int y){
        Arr* result = (Arr*)malloc(sizeof(Arr));
        if (result){
            result->arr = (double*)malloc(x*y*sizeof(double));
            result->max_x = x;
            result->max_y = y;
        }
        return result;
    }

    void Arr_free(Arr* arr){
        free(arr->arr);
        free(arr);
    }

    // Arr_set(arr, 0, 0, 3.14) is correct.
    void Arr_set(Arr* arr, int i, int j, double val){
        //replace your code if needed:
        assert(arr->max_x > i);
        assert(arr->max_y > j);
        arr->arr[i + j*arr->max_x] = val;
    }

    // Arr_get(arr, 0, 0) is correct.
    double Arr_get(Arr* arr, int i, int j){
        //replace your code if needed:
        assert(arr->max_x > i);
        assert(arr->max_y > j);
        return arr->arr[ i + j*arr->max_x];
    }


    int main(void)
    {
        Arr* a = Arr_new(3,3);
        Arr_set(a, 2, 2, 1.234) ;
        double val = Arr_get(a,2,2);
        printf("val = %f\n",val);

        Arr_free(a);
        return 0;
    }

关于c - 如何检测C二维数组的溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304792/

相关文章:

javascript - 按属性对三个不同的对象数组进行排序

javascript - 如何获得两个字符串数组的差异?

java - java中二维数组的输出表

matlab - 如何在 Matlab 中获取科学记数法的指数

javascript - 通过连接多个数组来创建列表矩阵

c - 禁用优化的 c alloca 函数的奇怪汇编代码 - gcc 按常量 16 使用 DIV 和 IMUL,并进行移位?

在 c 中创建一个在后台运行但在我请求它之前不执行其任务的守护进程

C:指向结构数组的动态指针数组

c - 在 C 中停止 getline

c++ - 将数组分配给多维数组,反之亦然