C++ Netbeans c/c++;编译器数组从1开始,而不是从0开始

C++ Netbeans c/c++;编译器数组从1开始,而不是从0开始,c++,arrays,netbeans,C++,Arrays,Netbeans,这是解释问题的简化代码: int *nums[10]; *nums[0] = 5; cout << *nums[0] << endl; int*nums[10]; *nums[0]=5; cout数组是基于0的。您正在遇到未定义的行为 int *nums[10]; 创建一个包含10个指向int的未初始化指针的数组 *nums[0] = 5; 取消对未初始化指针的引用。任何事情都有可能发生。要使其按预期运行,请在访问指针之前分配内存: for ( int i =

这是解释问题的简化代码:

int *nums[10];

*nums[0] = 5;

cout << *nums[0] << endl;
int*nums[10];
*nums[0]=5;

cout数组是基于0的。您正在遇到未定义的行为

int *nums[10];
创建一个包含10个指向
int
的未初始化指针的数组

*nums[0] = 5;
取消对未初始化指针的引用。任何事情都有可能发生。要使其按预期运行,请在访问指针之前分配内存:

for ( int i = 0 ; i < 10 ; i++ )
   nums[i] = new int;
for(int i=0;i<10;i++)
nums[i]=新整数;
并在结尾处删除:

for ( int i = 0 ; i < 10 ; i++ )
   delete nums[i];
for(int i=0;i<10;i++)
删除nums[i];
例如,我在MSV中收到一条警告:

警告C4700:使用了未初始化的局部变量“nums”


还有一个崩溃:)。

在C/C++中,数组总是0索引的

我假设您想要创建一个整数数组。如果要创建指向整数的指针数组,请查看Luchian的答案

您声明了一个由10个指向整数值的指针组成的数组。您没有为实际值分配内存。这就是为什么会出现错误

您需要为整数分配内存。为此,您有两种方法:

int nums[10];
nums[0] = 5;
cout << nums[0] << endl;
int nums[10];
nums[0]=5;

如果编译器没问题,那就是你使用的
*
你需要对你的假设和人物更加保守。我不明白为什么这值得投反对票。它没有显示如何正确使用
int*nums[10]
,但指针数组可能不需要,并且显示了两个可行的替代方法,这是正确的。@BenVoigt一个是我的,但已删除。我看到
delete[]nums
在原始问题上是错误的,只是后来才意识到他更改了原始代码。-1:您的示例生成了一个与OP想要使用的类型完全不同的数组
int
int*
@trinithis非常不同:询问OP为什么要使用该类型是完全合适的。我自己也在质疑。当我在上面贴例子时,我会把它缩减到一个看似奇怪但简单的程度。OP可能实际上需要一个int指针数组,或者干脆把数组改成
intnums[10]然后访问
nums[0]=5。如果事先不了解new/delete正是他们所需要的,那么试图解释如何在这种情况下使用new/delete可能不是一个好主意(特别是考虑到OP明显缺乏经验)。在我看来,这混淆了问题,证明了错误的解决方案。
int nums[10];
nums[0] = 5;
cout << nums[0] << endl;
int* nums = new int[10];
nums[0] = 5;
cout << nums[0] << endl;
delete[] nums; // don't forget to delete