题目是让看程序有错误吗 int main(int argc,char *argv[]) 自己编译运行之后,是段错误 |
|
5分 |
void func(char *p) //指针不能回传 改为char *&p { p=(char *)malloc(sizeof(char)); // 只分配了一个字节 } |
15分 |
解释如下:
#include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char *p) { //这里只申请了一个字节 sizeof(char) = 1 p = (char *)malloc(sizeof(char)); // 申请内存,但是却没有说明具体大小,是不可以的吧? } int main(int argc, char *argv[]) { char *s = NULL; func(s); //实参与形参的问题,s还是NULL,所以下一句出错 strcpy(s, "i love xiyou_linux");//我觉得这里也有问题吧,这意思九是复制到首地址里了吧? puts(s); return 0; } |
15分 |
一种可能的修改:
#include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> void func(char **p) //更改普通变量的值,使用一级指针;更改一级指针的值,使用二级指针 { *p = (char *)malloc(sizeof(char)*20); //分配20个字节 } int main(int argc, char *argv[]) { char *s = NULL; func(&s); //传入变量的地址 strcpy(s, "i love xiyou_linux"); puts(s); return 0; } |
所以,改正的话是 不过这样func不就没有什么用了吧 |
|
谢谢谢谢 |
|
5分 |
Windows:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 Linux: |