下面是一些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;
}
谢谢!
第二个例子已经差不多了,但更改
int testFunction(char **t) {
...
t = malloc(100 + 1);
至
int testFunction(char **t) {
...
*t = malloc(100 + 1);
这一点是,你正在传递一个char**
,一个指向指针的指针,所以你想把malloc分配给它所指向的(指针)。
您的测试函数有点落后。大小应为输入。分配的指针应该是输出:
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;
}