gpt4 book ai didi

c - 哦不!在 C 中的以下程序中获取核心转储

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:09 24 4
gpt4 key购买 nike

这是我在 Unix 机器上使用的代码,使用 gcc 编译器

#include<stdlib.h>
main()
{
int nr = 0, nc = 0;
printf("Enter number of coulmns:");
scanf("%d", &nc);
printf("Enter number of rows:");
scanf("%d", &nr);
int *x ,temp;
printf("Enter the matrix:\n");
for(int i = 0; i < nr; i++)
{
for(int j = 0; j < nc; j++)
{
scanf("%d", &temp);
*(x + i * nc + j) = temp;
}
}

for(int i = 0; i < nr; i++)
{
for(int j = 0; j < nc; j++)
{
printf("%d ", *( x + i * nc + j));
}
printf("\n");
}
}

它需要适当的行数和列数。但是,一旦我输入矩阵的第一个整数输入,我就会得到 coredump。谁能告诉我问题出在哪里?

最佳答案

你从不分配空间,所以你只使用x,一个未初始化的指针,并在它恰好指向的地方写东西。完全未定义的行为。

您必须使用 malloc() 将其初始化以指向有效内存:

x = malloc(nr * nc * sizeof *x);

此外,检查分配是否成功,并在此之前检查 scanf() 是否成功。 I/O 和内存分配都是可能会失败的“脆弱”操作类别。

那么,就不需要temp了,可以直接在循环中扫描到矩阵中:

scanf("%d", x + i * nc + j);

同样,这也可能会失败,因此您应该处理它,而不是仅仅假设它有效。

关于c - 哦不!在 C 中的以下程序中获取核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421039/

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