【问题标题】:Error in Traversing Matrix in C在 C 中遍历矩阵时出错
【发布时间】:2015-02-28 05:54:21
【问题描述】:

以下代码中提到的错误注释是程序停止工作的地方。 我不确定是什么错误。请帮忙。谢谢。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>

using namespace std;

int print(int *g[],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("Check\n");
            printf("%d\t",g[i][j]);
        }
        printf("\n");
    }
    return 1;
}

int main()
{
    int i,r,c,j;
    printf("Enter Matrix Row\n");
    scanf("%d",&r);
    printf("Enter Matrix Column\n");
    scanf("%d",&c);

    int **s=(int **)malloc(r*sizeof(int*));
    for(i=0;i<r;i++)
        s[i]=(int*)malloc(c*sizeof(int));

    memset(s,0,sizeof(s));

    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("I will Win\n");

            // Here is the Error

            printf("%d\t",s[i][j]);
        }
        printf("\n");
    }
    //cout<<print((int**)s,r,c);

}

我认为 memset 应该在这里工作。 函数内部的遍历也不起作用。

【问题讨论】:

  • 您将其标记为 C++,但几乎没有使用 C++。都是C
  • @PaulMcKenzie 查看包含内容。
  • 你为什么首先以如此可怕的方式混合 c 和 c++ 代码?
  • @iharob - 不需要包含一个。其他的在“C”中有等价物。
  • @edbale “有错吗?” 是的,这完全是错误的,你应该把那个信息来源放到你的纸箱里。

标签: c++ arrays malloc


【解决方案1】:

memset() 将所有位设置为0,在您的情况下,您正在创建s NULL 中的所有指针。几乎是因为sizeof(s) 是指针的大小,而不是指针数组中的指针计数。

如果您需要初始化为零,则应该这样做

int **s=(int **)calloc(r, sizeof(int*));
for(i=0;i<r;i++)
    s[i]=(int*)calloc(c, sizeof(int));

【讨论】:

  • 再次感谢。当这里的二维数组传递给函数时,它是通过 copy 传递的,对吗?要通过引用传递,我必须使用指向二维数组的指针,对吗?你能告诉我如何通过引用传递它。非常感谢。
  • 不,传递了一个指针。您不需要通过引用传递。您将指针传递给传递的数组的相同数据。
  • 是的,我明白了。如果参数本身是 2d 和 1d 数组的指针,则传递指针。因此,无需通过引用传递。如果我们必须修改指针本身(不仅仅是它的内容),那么我们只需要多一层的间接性。就像我必须删除二维数组一样,我不能像我在这里做的那样传递它。如何将二维数组传递给删除它的函数?最后的帮助,非常感谢。
  • @edbale 你为什么要这么做?
  • 也许当我想删除一个表示为矩阵的图形时。在这种情况下,我害怕编译错误。每次我使用二维数组时都会遇到一些编译错误。
猜你喜欢
  • 1970-01-01
  • 2022-01-07
  • 2016-02-12
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多