不明白为什么C中程序的以下输出是这样的

时间:2018-04-24 18:32:51

标签: c

以下程序正在打印:

b C d Ë F G H 一世 Ĵ ķ 升 米

升 米 ñ Ø p 和(5个空格)

我不知道为什么会这样打印。我分配了10个字符的大小,并希望看到如果我打印它直到12会发生什么。请帮助我

int main(){
    char *sentences = (char*) malloc(sizeof(char)*10);
    int a;

    for(a = 0; a < 12; a++){
       sentences[a] = 'b' + a;
    }

    for(a = 0; a < 12; a++){
        printf("%c", sentences[a]);
    }

    printf("\n");
    //here I should free allocated memory, to avoid memory leak 
    sentences = (char *) malloc(sizeof(char)*5);

    for(a = 0; a < 5; a++){
        sentences[a] = 'l' + a;
    }

    for (a = 0; a < 10; a++){
        printf( "%c", sentences[a]);
    }
   free(sentences);
}

1 个答案:

答案 0 :(得分:3)

当您读取或写入已分配内存的末尾时,您将调用undefined behavior

这意味着您无法可靠地预测程序的行为。它可能会崩溃,可能会产生奇怪的结果,或者它似乎可以正常工作。未定义的行为本身如何显示可能会随着看似无关的代码更改而发生变化,例如添加额外的未使用变量或添加type Box<A> = { map: <B>(f: A => B) => Box<B>, fold: <B>(f: A => B)=> B } const box = <A>(x:A): Box<A> => { return { map: <B>(f: A => B): Box<B> => box(f(x)), fold: <B>(f: A => B): B => f(x), } } const numberToString = (x: number) : string => String (x) const stringToNumber = (x: string): number => Number (x) const b : Box<string> = box("1") // flow accepts this valid program b.map(stringToNumber) // flow rejects this invalid program b.map(numberToString) // ^ Cannot call `b.map` with `numberToString` bound to `f` because number [1] is incompatible with string [2] in the first argument. 进行调试。

仅仅因为你做了可能导致程序崩溃的事情并不意味着它