我已經寫以下示例代碼來演示我的問題傳遞一個字符指針數組
#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;
}
在該代碼中,我發現,一個新=(CHAR [2])的函數;不分配* a [1]的內存。
在gdb中我得到以下賽格故障。
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
這實在讓我很困惑。有人可以解釋我出錯的地方嗎?
我知道我可以通過狀空洞˚F參數(字符** &一),並通過調用函數f(b)和工作原理。但是,如果我使用char *** a,我想知道發生了什麼。它也應該工作。對不起,如果這是一個愚蠢的問題。
任何教程或參考上述問題將不勝感激。
在此先感謝。
我當然希望這僅僅是一個或多或少的學術問題和您正在使用'標準::矢量'等人在生產代碼... :) –