将char指针数组传递给函数
Passing a char pointer array to a function
我编写了以下示例代码来演示我的问题
#include <iostream>
#include <string.h>
using namespace std;
void f (char*** a)
{
*a = new (char*[2]);
*a[0] = new char[10];
*a[1] = new char[10];
strcpy(*a[0], "abcd");
strcpy(*a[1],"efgh");
}
int main ()
{
char** b = NULL;
f(&b);
cout<<b[0]<<"n";
cout<<b[1]<<"n";
return 1;
}
在这段代码中,我发现a = new (char[2]);没有分配*a[1]的内存。在gdb中,我得到以下segfault。
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400926 in f (a=0x7fffffffdfe8) at array1.cpp:10
10 *a[1] = new char[10];
(gdb) p *a[1]
Cannot access memory at address 0x0
这真的让我很困惑。谁能解释一下我哪里出错了?
我知道我可以传递像void f (char**&A)通过调用函数f(b)这是可行的。但是我想知道如果我使用char*** a会发生什么。它也应该工作。对不起,如果这是一个愚蠢的问题。如有任何关于上述问题的指导或参考,我们将不胜感激。提前感谢。
这是因为操作符的优先级,其中数组索引操作符[]
比解引用操作符*
具有更高的优先级。
因此,从编译器的角度来看,表达式*a[0]
实际上与*(a[0])
相同,这不是您想要的。
必须显式地添加括号来改变优先级:
(*a)[0] = ...
a[0], a[1]是char,它们里面有一个值,取消对这个值的引用显然会导致分割错误。你可能想做的是:
(*a)[...]
解引用'a',这是一个指针,这将给你一个数组
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中