簡體   English   中英

printf有時會打印多余的垃圾

[英]printf sometimes prints extra garbage

我正在解析一個.ppm文件,使用fgetc讀取一個字節,然后通過除以255.0來將它們轉換為浮點數,以獲取供OpenGL代碼使用的顏色。 這很容易。 我使用printf("%f %f %f\\n", color[0], color[1], color[2]);打印出數字以進行調試printf("%f %f %f\\n", color[0], color[1], color[2]); 在大多數情況下,此方法運行良好(請參閱第一行),但有時會打印出多余的垃圾(請參見第二行)。

0.086275 0.031373 0.000000
0.133333 0.000000 0.00<BA><B9>9?<D1><D0><D0>=<99><98>^X>3 0.078431 0.000000

任何想法為什么會這樣?

更新:

float *read_eight_bit(FILE *file, int rows, int cols)                                                                                                                                                                                                                          
{                                                                                                                                                                                                                                                                              
   float *data = (float *)malloc(rows*cols*3*sizeof(float));                                                                                                                                                                                                                    
   int c;                                                                                                                                                                                                                                                                       
   int i, j, k;                                                                                                                                                                                                                                                                 
   for(i = 0; i < rows; i++) {                                                                                                                                                                                                                                                  
     for(j = 0; j < cols; j++) {                                                                                                                                                                                                                                                
         for(k = 0; k < 3; k++) {                                                                                                                                                                                                                                                 
           if((c = fgetc(file)) != EOF) {                                                                                                                                                                                                                                                              
             data[get_index(i, j, k, rows, cols)] = c/255.0f;                                                                                                                                                                                                                     
           }                                                                                                                                                                                                                                                                      
           else {                                                                                                                                                                                                                                                                 
             perror("reached unexpected EOF");                                                                                                                                                                                                                                    
             free(data);                                                                                                                                                                                                                                                          
             return NULL;                                                                                                                                                                                                                                                         
         }                                                                                                                                                                                                                                                                      
     }                                                                                                                                                                                                                                                                                                                                          
   return data;
}

這是讀取內容的實際代碼。

在沒有看到更多代碼的情況下,我能想到的唯一解釋是,堆棧可能以某種方式被弄亂了,可能是由於緩沖區溢出或溢出(在數組外部寫入)造成的。

我建議通過cppcheck運行您的代碼,因為它可以檢測到許多這類問題。

暫無
暫無

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

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