gpt4 book ai didi

c - 如何正确使用 malloc() 来存储许多整数值?

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

我在使用 malloc() 时遇到问题。基本上我想存储来自位图的像素信息(假设 RGB 0-255 - 尽管将其存储为来自 fgetc() 的 int,所以我们仍然可以获得 EOF 指示符)。我希望它动态存储,因为我需要在将它发送到输出之前更改特定位。我不知道为什么这段代码会失败,但它似乎要么卡在 while 循环中,要么以 -1 的值退出(可能是段错误)。

int** outputbytes = (int **) malloc(writablesize*sizeof(char));
if (outputbytes == NULL)
printf("mallocfailed");
int i = 0;
while(i < writablesize)
{
int cbmp = fgetc(fbmp);
if(cbmp == EOF)
break;
outputbytes[i] = (int *) malloc(sizeof(char));
*outputbytes[i] = cbmp;
i++;
}

编辑:就大小而言,这只是逻辑和实现 malloc() 的错误。这是工作代码,感谢您的帮助

// Copy bmpdata to to dynamic memory
long* outputbytes = malloc(writablesize*sizeof(long));
if (outputbytes == NULL) exit(1); // Terminate if allocation fails
int opbi = 0; // Index for the output bytes
while(opbi < writablesize)
{
int cbmp = fgetc(fbmp);
outputbytes[opbi] = (long) cbmp;
opbi++;
}

最佳答案

int** outputbytes = (int **) malloc(writablesize*sizeof(char));   //sizeof(char ) ??

这是不正确的(内存不足 int *)。

您需要为 int * 的数量分配内存,但您为 char 的数量分配内存。这样做 -

int** outputbytes = malloc(writablesize*sizeof(int *));

现在这为 writablesize 数量的 int * 分配内存,然后在 while 循环中分配内存-

 outputbytes[i] = (char *)malloc(sizeof(char));  //allocating memory -sizeof(char) ?? 

分配等于 sizeof(int) 的内存来保存一个整数,因为它是一个 int *

 outputbytes[i] = malloc(sizeof(int));

注意- 不要转换 malloc 的结果。还要记住 free 分配的内存。

关于c - 如何正确使用 malloc() 来存储许多整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294500/

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