我想分配内存并将其填充到指针,这是函数参数之一,但我认为我没有得到一些重要的东西,请帮助我。
所以,如果我这样做,一切正常:
void alloc(char **p, int n)
{
*p = new char[n];
}
int main() {
char * ptr = NULL;
int n = 10;
alloc(&ptr, n);
for(int i = 0; i<(n - 1); i++)
ptr[i] = '1';
ptr[n - 1] = '\0';
printf("%s", ptr);
return 0;
}
现在我想将已分配的内存初始化为函数
void alloc(char **p, int n)
{
*p = new char[n];
for(int i = 0; i<(n - 1); i++)
*p[i] = '1';
*p[n - 1] = '\0';
}
int main() {
char * ptr = NULL;
int n = 10;
alloc(&ptr, n);
printf("%s", ptr);
return 0;
}
程序崩溃。我不明白为什么。请有人解释一下吗?
答案 0 :(得分:4)
请尝试使用(*p)[i]
和(*p)[n - 1]
。优先规则会导致*p[i]
被评估为*(p[i])
。
答案 1 :(得分:3)
试试这个:
((*p)[i]) = '1';
您对运营商的评估订单有疑问。
答案 2 :(得分:2)
可能是因为:
*p[i]
被解释为好像你写了这个:
*(p[i])
不像你写过这个,这就是你的意思:
(*p)[i]
答案 3 :(得分:2)
这应该可以解决问题,
void
alloc( char*& p, int n )
{
p = new char[n];
std::fill_n( p, n - 1, '1' );
p[n - 1] = '\0';
}
如果您坚持使用指针作为参数,请更改p
的全部
在(*p)
的函数中(并且不要忘记检查空指针
如果你通过了,那就做一些合理的事。
std::string
- 这个功能甚至不需要像你一样
可以写std::string( n, '1' )
。
答案 4 :(得分:1)
试试这个
#include <stdio.h> // for NULL
void alloc(char **p, int n)
{
*p = new char[n];
for(int i = 0; i<(n - 1); i++)
*((*p) + i) = '1';
*((*p) + n - 1) = '\0';
}
int main() {
char * ptr = NULL;
int n = 10;
alloc(&ptr, n);
printf("%s", ptr);
// never forget delete pointers
delete [] ptr;
return 0;
}
答案 5 :(得分:1)
它是运营商问题的优先选择。在你的alloc函数中尝试这个:
for(int i = 0; i<(n - 1); i++)
(*p)[i] = '1';
(*p)[n - 1] = '\0';