long long int ** A = new long long int * [N];
for ( long long int i=0; i<N; i++)
{A[i]=new long long int[N];}
为什么这会导致此警告:警告 C4244:“正在初始化”:从“__int64”转换为“无符号整数”,可能丢失数据
不可能有一个 long long int 2d 动态数组吗?
long long int ** A = new long long int * [N];
for ( long long int i=0; i<N; i++)
{A[i]=new long long int[N];}
为什么这会导致此警告:警告 C4244:“正在初始化”:从“__int64”转换为“无符号整数”,可能丢失数据
不可能有一个 long long int 2d 动态数组吗?
long long
您收到的警告与您的数组由元素组成的事实完全无关。警告是针对您的i
变量或针对您的N
. 很可能是N
导致问题的原因。是什么N
?它是如何声明的?我怀疑它也是一个long long
.
在 C++ 语言中,用于指定内存大小(顺便说一下,数组大小和索引)的类型称为size_t
. 显然在您的平台上是 32 位类型(32 位平台?)size_t
的代名词。unsigned int
编译器正在尝试将您N
的 64 位类型转换为size_t
并触发警告。
无论如何,绝对没有理由坚持使用long long
fori
或 for N
。为两者选择更合理的类型(或转换N
为该类型),警告将消失。
尝试这个
#include<iostream>
#include<stdio.h>
using namespace std;
int main(int argc, char *argv[]) {
int N=10;
int i;
long long int **A=new long long int*[N];
for(i=0;i<N;i++)
{
A[i]=new long long int [N];
}
A[2][5]=5;
cout<<A[2][5]<<endl;
for(i=0;i<N;i++)
delete []A[i];
delete [] A;
return 0;
}
对我有用,即使使用 -Wall 也不会发出警告