【发布时间】:2015-01-27 15:11:23
【问题描述】:
我有以下 sn-p 代码,它分配内存超出范围:
char *str1 = (char *) malloc(sizeof(char) * BUF_SIZE);
printf ("str1 = ");
scanf("%s", &str1);
int n = strlen(str1);
最初我在strlen() 中获得了Segmentation Fault。在玩过 gdb 之后,我知道str1 位于一个超出范围的地址。下面显示的是 gdb 输出。
(gdb) print str1
$1 = 0x636261 <Address 0x636261 out of bounds>
注意:断点设置在调用strlen() 的行上。另外,BUF_SIZE 设置为#define BUF_SIZE 10
任何帮助将不胜感激。谢谢:)
【问题讨论】:
-
在“读取”之前添加
memset(str,0,BUFSIZE) -
不要使用
scanf,而是使用fscanf或fgets。 -
@Algo:为什么?我自己通常建议不要使用
*scanf(),但在这种情况下,这几乎不是问题,特别是如果建议使用fscanf(),它与scanf()有相同的问题...?
标签: c string segmentation-fault malloc scanf