为什么这会产生无限循环?

时间:2018-05-18 10:50:25

标签: c

    if (num_samples2 == 252) {
        char buffer[1024];
        char* p = buffer;
        for(int a = 1; a < num_samples2 - 6; a = a + 6){
            p += sprintf(p, "%f,",data_samples[a]);
            p += sprintf(p, "%f,",data_samples[a+1]);
            p += sprintf(p, "%f,",data_samples[a+2]);
            p += sprintf(p, "%f,",data_samples[a+3]);
            p += sprintf(p, "%f,",data_samples[a+4]);
            p += sprintf(p, "%f",data_samples[a+5]);
        }
    }

无限循环的原因是什么,我真的不明白为什么=?

1 个答案:

答案 0 :(得分:0)

此代码没有无限循环

#include <iostream>
int main() {
    int num_samples2 = 252;
    for (int a = 1; a < num_samples2 - 6; a = a + 6) {
        std::cout << a << " ";
    }
}

返回1 7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103 109 115 121 127 133 139 145 151 157 163 169 175 181 187 193 199 205 211 217 223 229 235 241

正如其他人指出的那样,您可能会在buffer以外写入1024而不是您有未定义的行为。

使用编译选项-fsanitize=address通过clang或gcc跟踪它。