簡體   English   中英

將浮點數從字符串放入空數組

[英]Placing floats from string into void array

當我的函數讀取字符串中的浮點數並將它們放置在void數組中時,出現分段錯誤。 段代碼在以下代碼中的for循環約200次迭代后發生:

// Allocate memory
void** data;
data = (void**)malloc(num_vals * sizeof(float));

// Convert text to floats
(*(float**)data)[0] = atof(strtok(text, " "));  
for(int index=1; index<num_vals; index++) {
    (*(float**)data)[index] = atof(strtok(NULL, " "));   
    std::cout << (*(float**)data)[index] << std::endl;
}

void數組是必需的,因為字符串中數據的大小和類型是在運行時確定的。 我嘗試增加malloc的大小,但它沒有任何改變。 有什么想法嗎?

認真嗎?

std::vector<float> data;
std::istringstream str(text);
float fv;
while (str >> fv)
{
  data.push_back(fv);
}

現在是c ++

為什么要轉換為void ** ??? 您的代碼在索引編制中包含一些錯誤,因此讓我展示一些合理的更改

float* data;
data = (float*)malloc(num_vals * sizeof(float));

// Convert text to floats
data[0] = atof(strtok(text, " "));  
for(int index=1; index<num_vals; index++) {
 data[index] = atof(strtok(NULL, " "));   
 std::cout << data[index] << std::endl;
}

這樣做讓我很痛苦,這是您的代碼的一個版本,可能可以滿足您的要求。

// Allocate memory
void* data;
data = malloc(num_vals * sizeof(float));

// Convert text to floats
((float*)data)[0] = atof(strtok(text, " "));  
for(int index=1; index<num_vals; index++) {
    ((float*)data)[index] = atof(strtok(NULL, " "));   
    std::cout << ((float*)data)[index] << '\n';
}

但是請注意,如果您為我工作並嘗試簽入該代碼,我們將對您的職業選擇進行認真的討論。

我寧願看到這樣的事情:

std::vector<float> v;
std::copy(std::istream_iterator<float>(std::istringstream(text)),
          std::istream_iterator<float>(),
          std::back_inserter(v));

Ps Rob的規則#47:當您的意思是'\\n'時,請不要說std::endl

我認為,由於您正在定義void指針的指針並將其分配/廣播到void指針,因此它為每個元素分配4個字節的內存,因為在C / C ++中,關於指針類型的指針始終為4個字節浮子不夠大

在以編寫“ C ++”為幌子的莫名其妙的嘗試來創建這個怪物的過程中,您混淆了各種類型。 無論如何。 您要分配的內容只是float* ,因此您需要將data強制轉換回float*

((float*)data)[0] = myfloat;

有幾個問題。 一種是- data應該為void * ,而您有冗余* 其他可能是對齊方式,我不確定您是否可以將浮點數放在內存中的任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM