下面是一些psudo,但我正在努力实现这一目标。问题是写的,它返回一个空白指针。
int testFunction(char *t) {
int size = 100;
t = malloc(100 + 1);
t = <do a bunch of stuff to assign a value>;
return size;
}
int runIt() {
char *str = 0;
int str_size = 0;
str_size = testFunction(str);
<at this point, str is blank and unmodified, what's wrong?>
free(str);
return 0;
}
如果我有一个预定义的大小,例如 char str [100] =“”,并且我不尝试malloc或释放内存后记录,这可以正常工作。我需要能够使尺寸变得动态。
我也试过这个,但似乎不知何故遇到了一个腐败的指针。
int testFunction(char **t) {
int size = 100;
t = malloc(100 + 1);
t = <do a bunch of stuff to assign a value>;
return size;
}
int runIt() {
char *str = 0;
int str_size = 0;
str_size = testFunction(&str);
<at this point, str is blank and unmodified, what's wrong?>
free(str);
return 0;
}
谢谢!
答案 0 :(得分:7)
您的测试功能有点落后。大小应为输入。分配的指针应该是输出:
char* testFunction(int size) {
char* p = malloc(size);
<do a bunch of stuff to assign a value>;
return p;
}
int runIt() {
char *str = 0;
int str_size = 100;
str = testFunction(str_size);
<do something>
free(str);
return 0;
}
修改强>
根据评论,也将尺寸作为输出。
char* testFunction(int *size) {
*size = <compute size>;
char* p = malloc(size);
<do a bunch of stuff to assign a value>;
return p;
}
int runIt() {
char *str = 0;
int str_size;
str = testFunction(&str_size);
<do something>
free(str);
return 0;
}
答案 1 :(得分:4)
你差不多第二个例子,但改变了
int testFunction(char **t) {
...
t = malloc(100 + 1);
到
int testFunction(char **t) {
...
*t = malloc(100 + 1);
关键是你要传入char**
,一个指向指针的指针,所以你想把malloc分配给指向的东西(指针)。
答案 2 :(得分:0)
我也在学习c ++。我有一个相同的问题。所以在与工作中的c ++专家交谈之后,他建议我做这样的事情
int method(char* p) {
if (p) {
strcpy(p, "I like c++");
}
return strlen("I like c++");
}
int main()
{
char* par = NULL;
int len = method(par);
if (len > 0) {
par = (char*)malloc(len+1);
memset(par, 0, len + 1);
method(par);
cout << "ret : " << par;
}
free(par);
}