这是我的代码:
#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 的分配:
/* Very non-C-worthy code sample */ int * inputnum; inputnum = malloc( sizeof *inputnum ); if( inputnum == NULL ) { perror( "malloc" ); exit( EXIT_FAILURE ); } scanf( ..., inputnum );
但这对于任何熟悉 C 的人来说都会显得很奇怪 (除非有其他原因,在此 情况似乎没有任何原因。)
您遇到的问题是 scanf 是 将接收到的值存储在指向的位置 通过 inputnum,这是一个虚假位置,因为 inputnum 未初始化。
关于c - 有关 scanf 和内存分配的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165926/