我有一個名爲from_binary_to_decimal
的C函數,它被另一個函數x_caching
調用。問題是from_binary_to_decimal
返回例如2.25(一個浮點數),但x_caching
(有一行寫入來存儲返回值)修改了第一個函數返回的以前的值。C函數返回值但調用者分配另一個值
我把(在其下它們被執行的順序)代碼的圖像:
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.
後這裏作爲文本的代碼,沒有人會打擾你的如下鏈接 – stdcall 2013-03-14 18:55:07
我更新了我的問題,如果沒有被格式化得當那是因爲我即將用完代表的。請幫助。謝謝。 – 2013-03-14 19:02:55
你在什麼時候檢查'fTemp'的值?你使用調試器嗎? – moooeeeep 2013-03-14 19:05:20