我使用指针代替数组,我知道需要释放指针而不像数组。为什么使用指针代替数组会给我一个分段内存错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void bin(void){
char *input;
int choice;
int x = 0;
printf("Enter Decimal Code:\n");
scanf("%s",&input);
int leng = strlen(input);
for(int i = 0; i <= leng ; ++i){
if(input[i] == '1'){
x += pow(2,i);
}
else if(input[i] == '0'){
input[i] = 0;
}
free(input);
}
printf("Binary-Dec: %d\n",x);
}
int main()
{
bin();
}
答案 0 :(得分:4)
在您的代码中
scanf("%s",&input);
是有问题的部分。我可以看到,有两个问题。
input
是指针,&input
是指针的地址。&
,因为input
没有分配内存,它仍然会导致undefined behavior。你应该做
char input[32] = {0};
scanf("%31s", input); //limit the input buffer to prevent overflow
此外,建议您检查scanf()
的返回值是否成功,以确保输入正确。
FWIW,声明
[...]我知道需要释放指针[..]
是的,但只有在通过malloc()
或函数系列动态分配内存时才会这样。考虑以下情况,
char buf[32] = {0};
char *input = buf;
. . . .
在这种情况下,您无需以任何方式输入free()
,因为内存未动态分配。有关详细信息,请参阅this answer。
答案 1 :(得分:1)
由于您的指针为unitialized
,因此会出现undefined behaviour
并且您的代码可能有效或无效。
有关详细信息,请参阅this。
答案 2 :(得分:-1)
我所要做的就是替换
scanf("%s",&input);
与
scanf("%ms",&input);
感谢BLUEPIXY