Advertisement

一些经典的重点题目(动态内存管理)

阅读量:

题目一

复制代码
    void Getmemory(char* p){
    	p = (char*)malloc(100);
    }
    void Test(void){
    	char* str = NULL;
    	Getmemory(str);
    	strcpy(str, "hello wordl");
    	printf(str);
    }
    //运行Test会有什么结果

运行后发现程序崩溃
关于这个代码有如下几个错误

  1. 从内存中为程序分配一块连续的可用内存区域,并获取该区域的起始地址作为返回值;如果无法成功分配,则返回空指针;因此在调用完成后必须检查其返回值以确保操作成功。
  2. 程序退出该函数后,在这种情况下会自动回收变量p所占用的所有动态分配的空间;为了避免出现"动态内存泄漏"问题(memory leak),必须手动完成相关资源的回收。
  3. 在手动完成资源回收操作之后,在后续代码执行过程中应将其设为null(null)。
  4. 当参数str被传递给函数体时,在这种情况下会创建一个新的临时字符串副本,并对该副本进行处理以避免对原始输入数据产生影响。
复制代码
    void Getmemory(char** p){
    	*p = (char*)malloc(100);
    	if (

全部评论 (0)

还没有任何评论哟~