gpt4 book ai didi

c - 对 float ** 类型使用 scanf 的段错误

转载 作者:行者123 更新时间:2023-12-02 07:20:54 26 4
gpt4 key购买 nike

我正在尝试编写一个要求用户输入矩阵的函数。它提示行数,列数,然后提示矩阵每个元素的值:

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

void enterMatrix(float ** matrix, int nbLines, int nbColumns){
for (int i = 0; i < nbLines * nbColumns; i++){
printf("i = %d? ", i);
scanf("%f", matrix[i]);
}
}

int main(void){
int nbLines, nbColumns;
printf("nbLines? "); scanf("%d", &nbLines);
printf("nbColumns? "); scanf("%d", &nbColumns);
float *matrix[nbL * nbCol];

enterMatrix(matrix, nbLines, nbColumns);
}

一切正常,直到我为 i = 0 输入一个值,然后按 enter,这会导致段错误。

知道哪里出了问题吗?

最佳答案

你的问题是因为

float *matrice[nbL * nbCol];

定义了一个未初始化指针数组(即 float * 数组),而不是一个 float 数组。然后将其作为指向 float 的指针传递给 enterMatrix()(即 float **)。 scanf() 调用然后读取到 matrix[i],这是一个未初始化的指针。结果是未定义的行为。

一个解决方法是将 main()matrice 的定义更改为

float matrice[nbL * nbCol];

并将功能更改为(我使用注释来突出显示更改)

void enterMatrix(float *matrix, int nbLines, int nbColumns)    /*  note type of matrix  */
{
for (int i = 0; i < nbLines * nbColumns; i++)
{
printf("i = %d? ", i);
scanf("%f", &matrix[i]); /* note what the second argument is */
}
}

关于c - 对 float ** 类型使用 scanf 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404639/

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