heap-overflow

new和malloc都是分配地址,不同的是new分配在堆中能改变缓冲区大小,malloc不能改变缓冲区,分配在栈中。

OJ Practice

今天写代码的时候偶尔遇到了一个缓冲区溢出问题, 将其记下来后面再深入考虑一番

1
2
3
4
5
6
7
8
// Input: 110 / 100
int main(int argc, char const *argv[])
{
char s1[40];
char op[1];
printf("%d\n", scanf("%s%s", s1,op));
printf("%s\n", s1);
}

输出s1发现没有东西, 这是因为op长度仅为1, 读入字符串写入了0, 恰好是s1的第1个字符,所以s1的第一个字符被置0了.
修改成下面的就没有问题了.

1
2
3
4
5
6
7
8
9
// Input: 110 / 100
// Output: 110
int main(int argc, char const *argv[])
{
char s1[40];
char op[2];
printf("%d\n", scanf("%s%s", s1,op));
printf("%s\n", s1);
}

C++

下面的在C++面向对象中很常见

1
void (*process) (char*);    // 定义了一个函数指针process,该函数无返回值,接受参数char*
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
chunk_t *next;

setbuf(stdin. NULL) //清理输入缓冲区
next = malloc(sizeof(chunk_t));
next->process = showlen;

printf("Enter value:");
gets(next->imp); // 从标准输入中得到串
next->process(next->imp);
printf("buffers done!\n");
}

系统空转命令:9090

使用go语言框架Beego搭建安卓API服务 Algebra | 共轭转置与 Hermite 矩阵

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×