C++代码在 Ubuntu 上不起作用
C++ code does not work on Ubuntu
我有这段代码在Visual Studio中运行没有任何错误,但在Ubuntu上没有,我通过终端(g++ try.cpp -o try
(编译它。也许你能找出原因吗?
#include <iostream>
using namespace std;
int ***lol(int *a, int n, int m)
{
int ***trtr = (int ***)new int[n];
for (int i = 0; i < n; i++)
{
trtr[i] = (int **)new int[m];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
trtr[i][j] = &a[i * m + j];
}
}
// for (int i = 0; i < n; i++)
// {
// for (int j = 0; j < m; j++)
// {
// *trtr[i][j] = a[i * m + j];
// }
// }
return trtr;
}
int main()
{
int n, m;
cin >> n >> m;
int *a = new int[n * m];
for (int i = 0; i < n * m; i++)
a[i] = i;
int ***kekl = lol(a, n, m);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << *kekl[i][j] << " ";
}
cout << endl;
}
//system("pause");
return 0;
}
输入示例:10 10
Output: 36495648 36495688 36495728 36495768 0 36495772 0 36495784 0 36495788
0 36495784 0 36495788 0 36495792 0 36495804 0 23
0 36495804 0 23 24 25 30 31 32 33
30 31 32 33 34 35 40 41 42 43
40 41 42 43 44 45 50 51 52 53
50 51 52 53 54 55 56 57 58 59
Segmentation fault (core dumped)
如果您将包含注释部分,则只会收到分段错误(核心转储(
再在Visual Studio的Windows上再一次,它工作正常。
这段代码有一些问题,所以我只能猜测你想要实现什么。
这里最有问题的是int ***trtr = (int ***)new int[n];
.
我猜你想在这里分配一个二维的 int 数组。所以你需要为 n 个指向 int 数组的指针分配空间。相反,您要做的是分配一个大小为 n 的 int 数组,并将其转换为 int***
。随后对trtr的访问会导致未定义的行为,这可能会导致MS Windows上的行为与Ubuntu上的行为不同。"未定义的行为是未定义的。">
分配 int 指针数组的正确方法是 int **trtr = new int*[n]
。请注意,我不需要强制转换,并且我使用了类型 int*
.
您要编写的代码可能是:
#include <iostream>
int **lol(int *a, int n, int m)
{
int **trtr = new int*[n];
for (int i = 0; i < n; i++)
{
trtr[i] = new int[m];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
trtr[i][j] = a[i * m + j];
}
}
// for (int i = 0; i < n; i++)
// {
// for (int j = 0; j < m; j++)
// {
// *trtr[i][j] = a[i * m + j];
// }
// }
return trtr;
}
int main()
{
int n, m;
std::cin >> n >> m;
int *a = new int[n * m];
for (int i = 0; i < n * m; i++)
a[i] = i;
int **kekl = lol(a, n, m);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
std::cout << kekl[i][j] << " ";
}
std::cout << std::endl;
}
//system("pause");
return 0;
}
(我还删除了using namespace std;
.你应该尽量避免这种情况。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 使用 libcurl C++将文件下载到 Ubuntu,简单示例不起作用
- Opencv 链接 CMAKE 不起作用 Ubuntu 16.04 Docker
- C++代码在 Ubuntu 上不起作用
- 关于C++ enable_if_t;为什么这段代码不起作用(gcc 8.1,Ubuntu)
- ubuntu Linux 中的数组副本实际上不起作用
- "iw"命令在Qt Ubuntu 14.04的Qprocess中不起作用
- C++ 类模板显式实例化在 macOS 上工作,在 ubuntu 上不起作用
- Atoi 转换分段错误在 Windows 上工作,但在 Ubuntu 中不起作用