内存分配调用

通过函数给实参分配内存,可以通过二级指针实现

复制代码
#include<stdio.h>
#incldue<stdlib.h>

void getheap(int *p) //错误的模型
{
    p = malloc(100);
}

void getheap(int **p) //正确的模型
{
    *p = malloc(100);
}
int main()
{
    int *p =NULL;
    getheap(&p);
    free(p);
    return 0;
}
复制代码

如果出现以下错误:

test.c:6:7: warning: incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]

  *p = malloc(100);

是因为没有加上#include<stdio.h>的头文件。

 

以下的方法也是可以的

复制代码
int *getheap() //正确的方法
{
    return malloc(100);
}

int main()
{
    int *p =NULL;
    p = getheap();
    free(p);
    return 0;
}
复制代码

 

下面的写法是错误的:

复制代码
char *getstring() //错误的写法 
{
    char array[10] = “hello”;
    return array;
}
int main()
{
    char *s = getstring();
    printf(“s = %s\n”,s);
    return 0;
}
复制代码

原因是:

char array[10] = “hello”;  //栈变量,在函数调用结束之后便被释放掉了

 

下面方法返回结果可行:

复制代码
#include<stdio.h>

char *getstring()
{
    char *p = NULL;
    p = "string";
    return p;
}

int main()
{
    char *p = NULL;
    p = getstring();
    printf("p = %s\n",p);
    return 0;
}
复制代码

 

不涉及到内存分配:

复制代码
char getstring()  //正确的写法
{
    char c = ‘a’;
    return c;
}    
int main()
{
    char c= getstring();
    printf(“c = %c\n”,c);
    return 0;
}
复制代码

是正确的。

 

下面的写法也是可以的

复制代码
const char *getstring() //正确的
{
    return “hello”;
}
int main()
{
    const char *ss = getstring();
    printf(“ss = %s\n”,ss);
    return 0;
}
复制代码

常量在静态区,一直有效,直接返回地址是允许的。

可以将常量的地址返回值返回

或者:

复制代码
char *getstring() //函数可以正确返回
{
    static char array[10] = “hello”; //在静态区域
    return array;
}
int main()
{
    char *s = getstring();
}
复制代码

 

posted @   王清河  阅读(293)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-07-11 1004 Counting Leaves (30)
2018-07-11 1106 Lowest Price in Supply Chain (25)
2018-07-11 1094 The Largest Generation (25)
点击右上角即可分享
微信分享提示