69,369
社区成员
发帖
与我相关
我的任务
分享
#if 1
void get_ptr(char ***save)
{
//argv数组中的每个元素都是指向rodata段的指针,rodata段中数据的生命周期等同程序生命周期
char *argv[] = {"hello", "C", "world"};
*save = argv;//argv本身就是字符指针数组中元素的首地址,直接赋给二级字符指针即可
}
int main(void)
{
char **save = NULL;
get_ptr(&save);
//完全不必担心save数组中的元素出了get_ptr函数被释放,除非你的程序走到头了.
printf("%s\t%s\t%s\n", save[0], save[1], save[2]);
return 0;
}
#endif
//使用动态分配
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int i,L;
char *p;
void main() {
for (i=0;i<20000;i++) {
L=rand();
p=malloc(L);
if (NULL==p) {
printf("malloc error!\n");
continue;
}
memset(p,0,L);
free(p);
}
}
//不使用动态分配
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define MAXLEN 30000
int i,L;
char buf[MAXLEN];
char *p;
void main() {
p=&buf[0];
for (i=0;i<20000;i++) {
L=rand();
if (L>MAXLEN) {
printf("L>MAXLEN==%d, ignore spilth.\n",MAXLEN);
L=MAXLEN;
}
memset(p,0,L);
}
}
个人倾向不使用动态分配。
char * getstr()
{
char * pret = new char[XXX];
......;
return pret;
}
void release(char *& ptr)
{
delete []ptr;
ptr = NULL;
}
这样跨DLL使用也没有问题