【发布时间】:2017-04-04 14:06:05
【问题描述】:
我正在尝试在 C 中创建一个动态增加的数组,但由于某种原因,除了数组的第一个元素之外,我无法将值分配给任何东西。代码运行时,temp的值一直在变化,而val的内容只是一个地址和列表中第一个float的值。有任何想法吗?提前致谢!
//Initialise variables.
char buf[20]={0};
float temp=0;
int i=0;
//Create the initial array.
size_t size = sizeof(float)*10;
float* val = malloc(size);
if (val == NULL) {
fprintf(stderr, "Initial malloc failed\n");
exit(1);
}
//Open the file (a list of floats).
FILE *file;
file = fopen("/Users/cc756/Dropbox/C_ECG_PROJECT/ECG_Project/ECG_Project/dataStream", "r");
if (!file){
printf("Coulding find file.\n");
exit(1);
}
//Save the contents of the list to a float array.
while (fgets(buf,20, file)!=NULL){
temp = atof(buf);
if (temp != 0){
val[i] = temp;
i++;
if(i==size){
size *= 2;
float* val_temp = realloc(val,size);
if(val_temp == NULL){
printf("Realloc failed.\n");
}
else{
val = val_temp;
}
}
}
}
【问题讨论】:
-
你还没有在我能看到的任何地方初始化
i... -
请阅读如何创建minimal reproducible example。您的代码不是minimal,因为您可以删除所有文件操作并通过简单循环演示问题。它也不是完整的,因为如果有人试图按原样编译它,它会抛出编译错误。
-
@ChrisCollins:你如何确定
val[2]和val[3]没有被分配?调试器?printf? -
@ChrisCollins:我对
xcode不太熟悉。记住val是一个指针,而不是一个数组——也许你需要在xcode中设置一些东西来查看val之后的元素。还可以尝试使用printf打印出您的数组元素。 -
您的代码以及 Vlad 在其答案中提出的修复,运行良好。您的问题出在调试器上。添加我评论的循环,您会看到前 5 个位置的正确值
标签: c arrays memory malloc dynamic-arrays