wordpress 个人站,不想使用wordpress,wordpress手写seo代码,学做电商网站一般情况#xff0c;子函数中动态申请内存#xff0c;将地址返回给主函数#xff0c;理论上应该也是可以的#xff0c;需要子函数返回动态内存地址#xff0c;主函数实参是相应的地址变量即可。只不过#xff0c;主函数实参传入子函数之前#xff0c;可能会将指针置空子函数中动态申请内存将地址返回给主函数理论上应该也是可以的需要子函数返回动态内存地址主函数实参是相应的地址变量即可。只不过主函数实参传入子函数之前可能会将指针置空那么子函数就不能动态申请内存了。
如下例子
C语言进阶---动态内存管理_c语言怎么遍历动态申请里面的内容-CSDN博客
4.几个经典的面试题 4.1 题目1
void Getmemory(char* p)//形参是实参的一份临时拷贝 p是指针变量 p指向NULL *p是NULL
{p (char*)malloc(100);//p由指向NULL 变为指向malloc开辟空间的起始地址
}
void Test(void)
{char* str NULL;GetMemory(str);//传的是实参strcpy(str, helllo world);printf(str);
}
//程序会崩溃无法打印更正通过传实参的地址来找到实参在内存当中的位置然后再改变实参的值
void GetMemory(char** p)//char**p接收str的地址是一个二级指针
{*p (char*)malloc(100);//*pstr 由指向NULL 变为指向malloc开辟空间的起始地址
}
void Test(void)
{char* str NULL;GetMemory(str);//转str的地址strcpy(str, helllo world);printf(str);free(str);str NULL;
}
int main()
{Test();return 0;
}
//程序会正常打印hello world另一个传地址的例子
4.2题目2
返回栈空间问题
char* GetMemory(void)
{char p [] hello world;//栈空间开辟数组return p;//p放在寄存器当中这个函数可以成功返回数组名p也就是数组的首元素地址}
void Test(void)
{char* str NULL;str GetMemory();printf(str);
}
int main()
{Test();return 0;
}
//栈空间在用完之后会被系统回收因此创建的数组p在GetMemory调用完之后就已经被销毁无法使用了
//str属于是野指针去访问了一块被销毁的空间因此会打印一些随机值改为
int* test()
{int a 10;return a;//a的地址被存放在寄存器当中
}
int main()
{int* p test();//p接收到a的地址printf(%d\n, *p);//p已经是野指针 打印10 因为调用test的栈空间还没有被覆盖printf(%d\n, *p);// 打印随机值 有一次调用test函数栈空间被新随机值给覆盖return 0;
}
另外上面所说子函数动态申请内存给主函数用主函数在使用完要释放。释放后最好置空否则其是个野指针可能会导致错误。
4.3题目3
void GetMemory(char** p, int num)
{assert(*p);*p (char*)malloc(num);
}
void tset(void)
{char* str NULL;GetMemory(str, 100);strcpy(str, hello);printf(str);//free释放free(str);str NULL;
}
int main()
{test();return 0;
}改正
void test(void)
{char* str (char*)malloc(100);strcpy(str, hello);free(str);//free释放str NULL;//置空if (str ! NULL){strcpy(str, world);printf(str);//无法打印}
}
int main()
{test();return 0;
}