【问题标题】:C++ Allocate a dynamic 2d array in functionC ++在函数中分配动态二维数组
【发布时间】:2021-01-26 22:26:54
【问题描述】:

gals 和介于两者之间的一切,首先,我想对新手/重复问题表示抱歉。

TL;DR 我想为二维字符数组分配内存,但是我只能在程序调用 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();
}

现在,每当我运行此代码时,都会收到以下错误:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

另外,在调试器中,当函数被调用并输入数组的大小时,我得到 use of undeclared identifier 'c' 错误。

谢谢你,我再次为新手或重复问题道歉,但我确实尝试了我从 Text 得到的答案,唉,无济于事。

【问题讨论】:

  • 我得到了使用未声明的标识符“c”错误这将阻止您获取可执行文件,因此您无法调试任何内容。跨度>
  • 请输入@drescherjm,但正如我所说,我是个菜鸟。为什么它起作用并且我能够单击调试图标目前超出了我的范围。
  • 无论你使用什么资源来学习 c++,你真的应该选择别的东西。显示的代码与您在 c++ 中所做的相差甚远。 alloc 的实现方式会阻止您正确释放分配的内存并进行边界测试。
  • @t.niese 我想你不能推荐别的东西吗?我主要从互联网和 stackoverflow 中学到了我所知道的。
  • StackOverflow 上有 The Definitive C++ Book Guide and List。 StackOverflow 是一个针对特定问题的问答平台,但不是学习语言的好起点。您应该首先学习一门语言的基础知识和概念,而这是通过使用一本好书来完成的。

标签: c++ arrays function c++11 dynamic-memory-allocation


【解决方案1】:

*(add)[i] 看起来不太正确,它索引 add 变量并在之后取消引用指针。这些括号无效。

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

【讨论】:

  • 刚刚尝试过,我得到 进程以退出代码 139 完成(被信号 11:SIGSEGV 中断)
  • add[i][i] 我认为也是错误的。你需要学习使用调试器来查看它在哪一行崩溃...
  • 我使用 add[i][i] 作为 *(*(add+i)+i) 的简写
  • 好的,设置 s=2 并在 (*add)[i] = new char[s];现在我得到:*(c+1)=error: use of undeclared identifier 'c'。我在第二次 (*add)[i] = new char[s] 执行后得到了 sigsegv 和崩溃。
  • 好,我想你会明白的。只需执行程序直到它崩溃。
猜你喜欢
  • 2013-11-14
  • 2021-02-03
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多