这是我的代码:

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

#define MAX 50

float** getdata(void);
void calculations(float* fPtr);
//void printoriginal(float* values, int inputnum, float* fPtr);

int main(void)
{
    float** fPtr;
    float* values;

    fPtr = getdata();
    calculations(*fPtr);
    int element;
//  printoriginal(*values, inputnum, *fPtr);



    system("PAUSE");
    return 0;
}

float getvalues(void)
{
     float* values = (float*)calloc(*inputnum, sizeof(float));

float** getdata(void)
{
    int i;
    int n;
    float** fPtr;
    int* inputnum;

    printf("How many values do you want to input into the array?");
    scanf("%d", inputnum);

    float* values = (float*)calloc(*inputnum, sizeof(float));

    if (values == NULL)
    {   printf("Memory overflow\n");
        exit(101);
    }


    for(i = 0; i < *inputnum; i++)
    {
        n = i + 1;
        printf("Please enter your %d number: ", n);
        scanf("%f",(values+i));
    }


    fPtr = (float**)calloc(*inputnum+1, sizeof(float*));
    if (fPtr == NULL)
    {   printf("Memory overflow\n");
        exit(101);
    }

    for(int c=0; c < *inputnum; c++)
    {
        *(fPtr+i) = (values+i);
    }
printf("%f", values+2);

return fPtr;
}


我在getdata中扫描了值,但在垃圾中进行了扫描。我很确定我的scanf已关闭。此外,我如何能够通过引用传回我的值数组?我也很难过。感谢大家。

最佳答案

代替

int * inputnum;
scanf(...,inputnum);


你要:

int inputnum;
scanf(...,&inputnum);


或者,或者您需要插入inputnum的分配:

/ *非常不值得使用C的代码示例* /
int * inputnum;
inputnum = malloc(sizeof * inputnum);
if(inputnum == NULL){
    perror(“ malloc”);
    退出(EXIT_FAILURE);
}
scanf(...,inputnum);


但这对熟悉C的人来说看起来很奇怪
(除非有其他原因,在这种情况下
似乎没有任何原因。)

您遇到的问题是scanf是
将接收到的值存储在指向的位置
由inputnum决定,这是自inputnum以来的虚假位置
未初始化。

关于c - 帮助scanf和内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5165926/

10-13 04:03