gpt4 book ai didi

c - 内存错误,指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:57 24 4
gpt4 key购买 nike

我正在编写一个简单的 C 程序来获取用户输入以创建任意数量的 float 数组,并且每个数组将包含任意数量的 float 。我必须使用动态分配的存储,但在创建正确的数据结构时遇到了问题。我一直在阅读有关 2D 数组的内容,并且我使用指针重新创建了相同的功能。

示例运行:

Enter number of Datasets: 
2
2
Enter size of dataset 0:
5
Size = 5
Array #: 0
Enter each float value:5
count: 0
size: 5
Enter each float value:4
count: 1
size: 5
Enter each float value:3
Segmentation fault (core dumped)

我不确定我的数组语法是否正确,我不确定如何使用指针到达第 i 个数组的第 n 个元素。对于二维数组,我可以简单地放置 array[i][n]。

我为外部数组调用了一个 malloc(),然后为每一行调用了一个。但是,如何使用 array[i][n] 语法访问和写入行中的每个元素?我使用每行的第一个元素来保存该行的大小。

下面是我的代码:

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


int numData;
int numVal;

float **array;




int main(){

/*get number of datasets */
numData = NumOfSet();
printf("%d\n",numData);
array = malloc(numData * sizeof(float));
if(array != 0){
/* get # of values per dataset and enter those values */
NumOfVal(numData);
}
else{
printf("Memory Allocation Failed");
}
}

int NumOfSet(){
printf("Enter number of Datasets: \n");
scanf("%d",&numData);
return(numData);

}


/* for each data set declare size and input float values */
int NumOfVal(int data){
int index; /* counters */
int array_index;
int copy;
float size;
float val;

for(index = 0; index < data;index++){
printf("Enter size of dataset %d:\n", index);
scanf("%f", &size);
copy = size;
printf("Size = %d\n", copy);
printf("Array #: %d\n", index);
/* malloc() call here?? */
*(array + index) = &size;
/* loop for entering float values */
for(array_index = 0; array_index < copy; array_index++){
printf("Enter each float value:");
scanf("%f", &val);
*(array[index] + array_index ) = val;
printf("count: %d\n",array_index);
printf("size: %d\n",(int) size);
}

}

}

最佳答案

array 是指向float 指针的指针。因此,您需要为第一个维度相应地分配它:

array = malloc(numData * sizeof(*float));

接下来需要为每一行分配内存:

array[index] = malloc(size * sizeof(float)); // or: *(array + index) = ...

不要忘记清理内存!您需要先释放所有元素 aray[i],然后释放第一个维度 array

关于c - 内存错误,指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599613/

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