gpt4 book ai didi

c - 努力了解如何使用 malloc() 正确分配内存

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

如果这看起来像是我之前提出的问题的重新发布,我深表歉意。我有一个数据数组 arr 和一个索引数组 index。我的目标是使用 for 循环创建在每个索引处分区的新数据数组,并进一步找到每个分区数组中的最小值。我正在使用 malloc 创建一个动态数组,然后在每个循环结束时释放它。

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

int main(void)
{
int j;
int arr[] = {1,3,4,6,7,8,12,87,89,12,34,43,54,67,81,2,0,10,23,45,81,23,89,23,56,81,28,79};
int index[] = {1,5,10,13,19,24};
int h = 27;
int k;
int c;
int len;
for(j = 0;j < 4;++j)
{ printf("\n");
len = index[j+1] - index[j] - 1;
printf("len %d: ",len);
int *temp_arr = malloc(1000*sizeof(int));
for(k = index[j];k<(index[j+1]);++k )
{
printf("array val %d, ", arr[k]);
temp_arr[k] = arr[k];
}
int local_min ;
local_min = temp_arr[0];
for ( c = 1 ; c < len ; c++ )
{ printf("Temp array %d, ", temp_arr[c]);
if ( temp_arr[c] < local_min)
{
local_min = temp_arr[c];
printf("Local min in loop %d ", local_min );
}
}
free(temp_arr);
printf("\n");
}
return 0;
}

我不明白如何使用 malloc 正确分配内存。我一直在尝试不同的值(value)观;值太小我的程序会崩溃,值太大我的输出一些是不合理的。在我在这里给出的例子中,我得到了正确值和无意义值的混合。

为每个 j 值创建这个动态数组是否有问题?我是否使用 free(temp_arr) 正确地取消了内存分配?

最佳答案

你正在从 index[j] 填充 temp_arrindex[j+1] 然后你从 打印它的值>c=1c=len=index[j+1] - index[j] - 1

首先:您正在打印您可能尚未初始化的值,因为您正在阅读尚未写入的地方。这是未定义的行为。

其次:必须保证index[j]index[j+1]len-1小于等于到你用 malloc 分配的数组的长度。

关于c - 努力了解如何使用 malloc() 正确分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730387/

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