数组赋值处的线程断点
Thread Breakpoint at an array assignment
我正在尝试根据您输入的值创建一个 (n x n) 大的数组,然后用随机整数填充该数组。你们能帮我解决两个问题吗?
任何大于 4 的 n 值在最后几行给出 "error at display",如果我显示它本来应该是什么值,如果它不是一个错误,它是相同的,还有像 20019238394
这样巨大的东西
为什么一路创建相同的数字?不是生成新的随机数吗?
#include <iostream>
#include <string>
#include <cmath>
#include <cstdlib>
#include <time.h>
using namespace std;
int arrayCreate(int);
int main(int argc, const char * argv[]) {
int n;
cout << "enter how big your array is (n) , it will be shown as (n x n)" << endl;
cin >> n;
cout << "------------------------------" << endl;
arrayCreate(n);
return 0;
}
int arrayCreate(int n){
srand (time(NULL));
int y=0, x=0;
int original[x][y];
//putting in random values
for (int y=0; y< n; y++){
for (int x=0; x< n; x++){
int check = (rand() % 9 + 1);
if (check < 10)
original[x][y] = check;
else
cout << "error";
}
}
//displaying those values
for (y=0; y<n; y++){
for (x=0; x<n; x++){
if (original[x][y] < 10)
cout << original[x][y] << " ";
else
cout << "error at display";
}
cout << " y is " << y << endl;}
return original[x][y];
}
您正在声明大小为 [0][0] 的数组。你想要的是大小 [n][n].
因此,您正在写入未分配的内存。更正:
int original[n][n];
应该适合你。
当创建一个新数组时,你应该在堆上分配它,所以它将是:
int** original = new int* [n]; // creates column
for(int i=0; i<n; i++)
original[i] = new int [n]; // creates rows
然后当不再需要时,必须释放内存
for(int i=0; i<n; i++)
delete original[i];
delete original;
我正在尝试根据您输入的值创建一个 (n x n) 大的数组,然后用随机整数填充该数组。你们能帮我解决两个问题吗?
任何大于 4 的 n 值在最后几行给出 "error at display",如果我显示它本来应该是什么值,如果它不是一个错误,它是相同的,还有像 20019238394
这样巨大的东西
为什么一路创建相同的数字?不是生成新的随机数吗?
#include <iostream> #include <string> #include <cmath> #include <cstdlib> #include <time.h> using namespace std; int arrayCreate(int); int main(int argc, const char * argv[]) { int n; cout << "enter how big your array is (n) , it will be shown as (n x n)" << endl; cin >> n; cout << "------------------------------" << endl; arrayCreate(n); return 0; } int arrayCreate(int n){ srand (time(NULL)); int y=0, x=0; int original[x][y]; //putting in random values for (int y=0; y< n; y++){ for (int x=0; x< n; x++){ int check = (rand() % 9 + 1); if (check < 10) original[x][y] = check; else cout << "error"; } } //displaying those values for (y=0; y<n; y++){ for (x=0; x<n; x++){ if (original[x][y] < 10) cout << original[x][y] << " "; else cout << "error at display"; } cout << " y is " << y << endl;} return original[x][y]; }
您正在声明大小为 [0][0] 的数组。你想要的是大小 [n][n].
因此,您正在写入未分配的内存。更正:
int original[n][n];
应该适合你。
当创建一个新数组时,你应该在堆上分配它,所以它将是:
int** original = new int* [n]; // creates column
for(int i=0; i<n; i++)
original[i] = new int [n]; // creates rows
然后当不再需要时,必须释放内存
for(int i=0; i<n; i++)
delete original[i];
delete original;