gpt4 book ai didi

c - 在 C 中具有函数的 realloc 结构

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

我的 C 程序崩溃了,我太新了,搞不懂。到目前为止它非常简单,我想代码足以找出问题所在。

我只是想逐行读取文件。一旦内存不足,我将加倍结构的内存。如果这还不够,我会提供您需要的任何其他信息。

非常感谢您的帮助,因为我现在已经被困了几个小时。

/*
John Maynard
1000916794
7/15/2013
HW-06
*/

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

#define N 100

struct course
{
char subject[11];
int catalogNum;
int sectionNum;
int enrollmentTotal;
int enrollmentCap;
};

void readFile(struct course *d, char* filename);

void double_array_size(struct course *d, int new_size);

int main(void)
{
char *filename = "hw06-data.csv";
struct course *d;

d = malloc( N * sizeof(struct course));

readFile(d, filename);

}


void readFile(struct course *d, char* filename)
{
FILE* fp;
char buffer[100];
int i = 0, array_size = 100;
struct course *temp;


if( ( fp = fopen(filename, "r") ) == NULL)
{
printf("Unabale to open %s.\n", filename);
exit(1);
}

fgets(buffer, sizeof(buffer), fp);

while( fgets(buffer, sizeof(buffer), fp) != NULL)
{
if (i == array_size)
{
array_size *= 2;
double_array_size(d, array_size);
printf("reached limit...increasing array to %d structures\n", array_size);
}



i++;
}
fclose( fp );
}

void double_array_size(struct course *d, int new_size)
{
struct course *temp;

temp = realloc(d, new_size * sizeof(struct course));

if(temp == NULL)
{
printf("unable to reallocate\n");
exit(1);
}

else
d = temp;
}

最佳答案

realloc() 可能会返回一个与原始指针不同的指针,但您仅将其分配给 temp,这样调用函数之后仍可使用原始指针。更改 double_array_size() 以返回由 realloc() 返回的新指针并调用

d = double_array_size(d, array_size);

此外,您应该始终检查 malloc()realloc() 等的结果。如果没有更多可用内存,它们可能会返回 NULL

关于c - 在 C 中具有函数的 realloc 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17680096/

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