gpt4 book ai didi

C函数返回一个值但调用者分配另一个值

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

我有一个名为 from_binary_to_decimal 的 C 函数,它被另一个函数 x_caching 调用。问题是 from_binary_to_decimal 返回例如 2.25(一个 float )但是 x_caching(写了一行来存储返回值)修改了第一个函数返回的先前值.

我放了代码的图片(按照它们执行的顺序):

float** cache_provider(struct INPUT_DATA* d, char** arrszChromosomes)
{
static float** arrfCache = NULL;
int i;
if (d == NULL && arrszChromosomes == NULL) return arrfCache;

if (arrfCache == NULL)
{
arrfCache = (float**)malloc(d->m_iPopulationSize * sizeof(float*));
for (i = 0; i < d->m_iPopulationSize; ++i)
arrfCache[i] = (float*)malloc(2 * sizeof(float));
}

x_caching(d, arrszChromosomes, &arrfCache);

return arrfCache;

void x_caching(struct INPUT_DATA *d,
char **arrszChromosomes,
float **arrfCache)
{
int i;
float fTemp = 0.0f;

for (i = 0; i < d->m_iPopulationSize; ++i) {
arrfCache[i][0] = get_cache_key(arrszChromosomes[i]);
fTemp = from_binary_to_decimal(d, arrszChromosomes[i], 0);
arrfCache[i][1] = fTemp;
}
}

float from_binary_to_decimal(struct INPUT_DATA *d,
char *szChromosome,
int iCacheQuery)
{
float fRetVal = 0.0;
float fFinal = 0.0f;
float *fCacheVal = NULL;
int i = 0;

if (iCacheQuery
&& (fCacheVal = get_x_value_from_cache(szChromosome)) != NULL)
return *fCacheVal;

for (i = 0; i < strlen(szChromosome); ++i)
fRetVal +=
(szChromosome[i] == '1' ? 1 : 0) *
powf(2, d->m_iBitsPChromosome - (i + 1));

fFinal = d->m_arrcDomainInterval[0] + (fRetVal * d->m_fDelta);
return fFinal;
}

fTemp 应该存储一个像 2.51 这样的数字,而不是存储一个像 8133608 这样的值。

最佳答案

对于初学者来说,您分配的 float 组的数量以及用于访问它们的数组索引是不同的:

arrfCache = (float**)malloc(d->m_iMaxGenerations * sizeof(float*));
for (i = 0; i < d->m_iPopulationSize; ++i)
arrfCache[i] = (float*)malloc(2 * sizeof(float));

您已经分配了 d->m_iMaxGenerations 个 float 组,但您正在迭代其中的 d->m_iPopulationSize

同样适用于 for 循环,其中有 fTemp:

for (i = 0; i < d->m_iPopulationSize; ++i)

当您只分配了 d->m_iMaxGenerations 时,您正在为 d->m_iPopulationSize 数组访问 arrfCache。如果 d->m_iMaxGenerations 较小,这可能会导致内存损坏和奇怪的值,如您所见。

关于C函数返回一个值但调用者分配另一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15417819/

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