gpt4 book ai didi

c - 第一次成功调用后 Scanf 崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:28 24 4
gpt4 key购买 nike

我在下面写了扫描两个 3x3 矩阵并打印它们的代码,

#include<stdio.h>
void scanmat(int **arr)
{
int i=0, j=0 ;
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",((*arr+i)+j));
printf("%d-%d\n",i,j);
}
}
}

void printmat(int **arr)
{
int i=0, j=0 ;
for (i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d\n",(*(*arr+i)+j));
}
}

}

void main ()
{

int a[2][2], b[2][2] ;
scanmat (a);
printmat(a);
scanmat(b);
printmat(b);
}

scanmat(a)printmat(a) 运行良好,但是当控制到达 scanmat(b) 时,我遇到了段错误。

下面是我的系统详细信息,

6_64-redhat-linux
Thread model: posix
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)

在分析核心时,我在下面找到了

Program terminated with signal 11, Segmentation fault.
#0 0x0000003496056470 in _IO_vfscanf_internal () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6.x86_64
(gdb) bt
#0 0x0000003496056470 in _IO_vfscanf_internal () from /lib64/libc.so.6
#1 0x0000003496063c6d in __isoc99_scanf () from /lib64/libc.so.6
#2 0x00000000004005d4 in scanmat (arr=0x7fff57041de0) at scanmat.c:10
#3 0x0000000000400842 in main () at scanmat.c:

感谢任何建议,崩溃的可能原因是什么

最佳答案

你有:

int a[2][2], b[2][2];

因此,您的矩阵只有 2x2,因此您覆盖了导致未定义行为的内存。

请记住,在 C 数组声明中,a[N]给你一个数组 aN元素。索引是基于 0 的,因此有效索引范围从 0 到但不包括 N .遍历此类数组的合适方法是

for(size_t i = 0; i < N; ++i)

换句话说,数组中的元素个数N是你应该在循环条件中使用的完全相同的值,只要你记得

  • 从零开始
  • 使用 < 进行比较

我也真的不认为你可以通过 int[2][2]到期望 int ** 的函数,你确定你没有收到这些调用的编译器警告吗?

关于c - 第一次成功调用后 Scanf 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138124/

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