C++ C++;在函数中分配动态2d数组

C++ C++;在函数中分配动态2d数组,c++,arrays,function,c++11,dynamic-memory-allocation,C++,Arrays,Function,C++11,Dynamic Memory Allocation,女孩们,以及这两者之间的一切,首先,我想为没有重复的问题道歉 TL;DR我想为2d字符数组分配内存,但是我只能在程序调用alloc()时这样做。感谢您的帮助 既然你们都喜欢代码,下面是我的: #include <iostream> using namespace std; #define LOG(x) cout<<endl<<x<<endl void alloc(char ***add){ cout<<"Size

女孩们,以及这两者之间的一切,首先,我想为没有重复的问题道歉

TL;DR我想为2d字符数组分配内存,但是我只能在程序调用alloc()时这样做。感谢您的帮助

既然你们都喜欢代码,下面是我的:

#include <iostream>

using namespace std;
#define LOG(x) cout<<endl<<x<<endl

void alloc(char ***add){

    cout<<"Size: ";int s;cin>>s;
        *add = new char *[s];
        for (int i = 0; i < s; i++) {
            *(add)[i] = new char[s];
            cout<<add[i][i]<<" ; ";
        }
}

int main() {
    char **c;

    alloc(&c);
    for (int i =0;i<2;i++) {
        for (int j = 0; j < 2; j++) {
            cout<<c[i][j];
        }
        cout<<endl;
    }
    
cin.get();
}
#包括
使用名称空间std;
#define LOG(x)cout
*(add)[i]
看起来不太正确,它对add变量进行索引,然后取消对指针的引用。那些括号没有效果


尝试相反的顺序,即,
(*add)[i]

我使用了未声明的标识符“c”错误,这将阻止您获取可执行文件,因此您无法调试任何.Ty来输入@drescherjm,但正如我所说,我是一个noob。为什么它工作,我可以点击调试图标在我之外。在这里,你学习C++的来源,你真的应该选择别的东西。所显示的代码远不是C++中所做的。
alloc
的实现方式会阻止您正确释放分配的内存和执行边界测试。@t.niese我想您不会推荐其他东西吧?我主要是从互联网和stackoverflow上学到的。这里有关于stackoverflow的。StackOverflow是针对特定问题的问答平台,但不是学习语言的良好起点。你应该首先学习一门语言的基础知识和概念,这是通过使用一本好书来完成的。只是尝试了一下,我就用退出代码139(被信号11:SIGSEGV打断)完成了这个过程。我认为添加[I][I]也是错误的。您需要学习使用调试器来查看它在哪一行崩溃……我使用add[I][I]作为*(*(add+I)+I)的简写,使s=2,并将断点设置为(*add)[I]=new char[s];现在我得到:*(c+1)=错误:使用了未声明的标识符“c”。第二次执行(*add)[I]=new char[s]后,我得到了sigsegv和崩溃。很好,我想你会找到答案的。只需逐步启动程序,直到崩溃。