gpt4 book ai didi

c - 从代码中断程序中删除 printf 语句

转载 作者:行者123 更新时间:2023-11-30 18:29:11 27 4
gpt4 key购买 nike

我有一个问题不明白,所以希望大家能帮助我。我编写了一个 C 程序来从十进制转换为二进制并将这些位写入整数数组,在我删除几个 printf 语句之前它工作正常。因为我认为这很奇怪并且删除 printf 语句不会改变逻辑我尝试在另一台机器上重现该问题的代码,无论有没有 printfs,它都可以正常工作。这是代码:

#include <stdio.h>
#include <stdlib.h>

int main(){

int a;
printf("input a number:\n");
scanf("%d",&a);

int size=sizeof(a);
size=size*8;
printf("size in bits: %d\n",size);


int *p;
p=malloc(size);


int i;
for(i=0;i<size;i++){


p[size-i-1]=a&0x1;

a=a>>1;
}

for(i=0;i<size;i++){

printf("%d",p[i]);
}

printf("\n");

}

当我删除

printf("input a number:\n");

printf("size in bits: %d\n",size);

我收到错误

a.out: malloc.c:2392: sysmalloc: Assertion `(old_top == initial_top (av)  && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.Aborted (core dumped)

如果有帮助,这里是我机器上的 uname -a 的输出

Linux aaaa 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

以及另一台机器的输出

Linux bernard-Inspiron-5558 3.13.0-95-generic #142-Ubuntu SMP Fri Aug 12 17:00:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

我的 gcc 版本

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) 

还有另一个

gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)

这与 gcc、操作系统有关,还是我在代码中做错了什么?

最佳答案

是的,您没有要求足够的内存。

int *p;
p=malloc(size); // size in bytes

int i;
for(i=0;i<size;i++){
p[size-i-1]=a&0x1; // size - 1 ints.
a=a>>1;
}

您需要为 size int 分配足够的内存。即

malloc(size * sizeof(int));

写入超过分配的内存是未定义的行为。

关于c - 从代码中断程序中删除 printf 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com