内存分配调用
通过函数给实参分配内存,可以通过二级指针实现
#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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)