gpt4 book ai didi

在 C 中创建和打印动态 float 组

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

我正在尝试创建一个动态 float 组。用户应键入值,直到找到负值。然后在屏幕上显示数组。由于我不知道数组的大小,每次输入有效值时,我都会使用 realoc() 来增加数组的大小

我的代码为所有元素分配了内存,但是当我打印数组时,出现了段错误。不知道我是否以错误的方式分配值或在读取它们时失败。

代码如下:

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

unsigned int createArray(float*);
void printArray(float *, unsigned int);

int main(){
float *pArray = NULL;
unsigned int arrayLength = 0;
arrayLength = createArray(pArray);
printArray(pArray, arrayLength);
return 0;
}

/**
* Ask the user to fill an array untill he types a negative value
*
* @param A pointer to the array we want to create
* @return The final length of the array
*
*/
unsigned int createArray(float *pArray){
float number = 1;
int arrayLength = 0;

while(number>0){
printf("\nSetting number %d: ", arrayLength);
scanf("%f", &number);
arrayLength++;
pArray=realloc(pArray, sizeof(float)*arrayLength);
if(pArray==NULL){
printf("\nERROR: Not enough memory");
free(pArray);
exit(0);
}
pArray[arrayLength-1] = number;
}


return arrayLength;
}
/**
* Prints an array given by the user
*
* @param Pointer to the array
* @param Length of the array
*
*/
void printArray(float *pArray, unsigned int arrayLength){
for(int i=0;i<arrayLength;i++){
printf("\nItem[%d]: %.2f", i, *pArray+i);
}
}

最佳答案

您正在为 createArray() 中的局部变量保留空间,其生命周期以该函数结束,您需要传递 pArray 的地址:

arrayLength = createArray(&pArray);

然后取消引用传递的指针到函数中的指针:

unsigned int createArray(float **pArray)
{
...
*pArray = realloc(*pArray, sizeof(float)*arrayLength);
if (*pArray == NULL) {
...

关于在 C 中创建和打印动态 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097467/

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