1、请问str和s的地址相差多少?为什么
2、打印结果是什么?为什么
你这都内存溢出了,你先把代码写正确来。
我想知道为什么str和s的地址相差16
@上年的邻居: 不一定是 16.
@Launcher: 可是我打印出来都是16啊。
@上年的邻居: 你问问别人机器上打印出来是不是 16 ?
@Launcher: 那你电脑打印的是多少
@上年的邻居:
char *str=(char *)malloc(1);
char *str=(char *)malloc(1);
@上年的邻居: C/C++ 中没有规定 malloc 分配的地址间有任何逻辑关系,所以请你不要在这条路上钻牛角尖。
@Launcher: 我在vc上运行了一下,果然是你说那样。可能是我Linux编译器的问题。能不能解释一下内存溢出的问题?
@上年的邻居: 我以 str 举例:
char *str=(char *)malloc(1); // 你分配了长度为 1 的内存
strcpy(str,"helloddddddddddddddddddd"); // 将长度为 24 的数据拷贝到长度为 1 的缓冲区内,越界了!!!!! str 只有 1 个字节大小,你却给它填充了 24 个字节,str+1 地址后的内存可能存放了其它的数据,你给它覆盖了。
@上年的邻居:
printf("%s\n",str); // 从 str 开始输出,直到遇到 '\0' 停止。你又越界了,str 只有 1 个字节,从第几个字节开始会遇到 '\0' 是未知的,它可能会输出其它的数据。
@Launcher: 非常感谢
顶楼上,槽点太多不知道怎么吐槽了
写这个程序只是想证明自己心中的疑问
@上年的邻居: 你想证明啥?证明 malloc(1)和 malloc(2) 之间的差一定是 16 ?
@Launcher: 我就是不明白才问的,不然你把它的输出结果解释一下
@上年的邻居: 跟你说了不一定是 16。你后面的语句都越界访问内存了。
@上年的邻居:
char *str=(char *)malloc(1);
char *str=(char *)malloc(1);