|
题目是让看程序有错误吗 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: |