[问题] 几个除错问题

楼主: wind137 (布谷密语)   2018-07-23 13:58:30
各位好
最近在自学C语言
有学长给我了他之前去面试时的考题 不过我们都是程式菜逼八
题目主要为找出程式码中有错误的地方
有些看不太懂哪边有问题 要烦请各位大大解答了 谢谢
1.
void test()
{
char a[32];
char b[48];
read(0,a,sizeof(a));
strcpy(b,a);
}
2.
char* fun();
void test
{
char *buf;
int len;
buf = fun();
len = strlen(buf);
buf[len-1] = '\0';
}
3.
int test(char *buffer)
{
char tmpline[256], *line;
if (buffer == NULL)
return 0;
memset(tmpline, 0, sizeof(tmpline));
line = strncpy(tmpline, buffer, sizeof(tmpline));
if (line == NULL)
return 0;
line[strlen(line)] = 0;
return 1;
}
4.
typedef struct list
{
char * next;
} list;
typedef struct z
{
list l;
} z;
void test()
{
z *x = malloc (sizeof(z));
if (!x)
return;
x->l.next=1;
free(x->l.next);
}
5.
c假设为>=0的整数
void test()
{
char *x = “0123456789”;
if (c)
x = malloc(1);
free(x);
}
这题run过程式后是free(x)这边出现error
是因为一开始指标字串x与后面分配的内存不一致吗?
6.
int *test(unsigned int n)
{
int aux;
int *p;
if (n == 1)
{
p = &aux;
}
else
{
p = (int *)malloc(n * sizeof(int));
}
return p;
}
此题是否为置底13诫的第5题那样
在函式中回传一个指向区域性自动变量的指标会失效?
以上几题百思不得其解 麻烦各位大大为蔡逼八解惑了
感谢!!
作者: sarafciel (Cattuz)   2018-07-23 14:13:00
只丢程式码谁晓得你的考题是要考什么东西XD
楼主: wind137 (布谷密语)   2018-07-23 14:15:00
抱歉 题目主要是找出一小段程式码里面可能逻辑错的地方
作者: sarafciel (Cattuz)   2018-07-23 14:43:00
123都是空字符的问题 str系列函数扫到空字符才会停strn系列则是扫到第n个字符才会停所以像第一题 如果我在a输入36个非空字符在strcpy的时候就会因为扫不到空字符超过边界第四题他直接把1塞给next然后再free当然炸掉第五题c=0时条件式不会进 你就会free到rodata 然后炸掉第六题就跟你讲的一样 不过指到区域变量的指标不会失效而是很高机率在执行过程中因为stack增减导致值被盖掉
楼主: wind137 (布谷密语)   2018-07-23 16:03:00
感谢cutekid大大与sarafciel大大的指点!

Links booklink

Contact Us: admin [ a t ] ucptt.com