这是我的代码:
#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/