从代码中断程序中删除 printf 语句
removing printf statment from code breaks program
我有一个问题想不通,希望大家能帮帮我。
我写了一个 c 程序从十进制转换为二进制并将位写入整数数组,在我删除几个 printf statements.Since 之前它工作正常我认为这很奇怪并且删除 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 有关,OS,还是我在代码中做错了什么?
是的,您没有要求足够的内存。
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 statements.Since 之前它工作正常我认为这很奇怪并且删除 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 有关,OS,还是我在代码中做错了什么?
是的,您没有要求足够的内存。
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));
写入分配的内存是未定义的行为。