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'转换为'unsigned int',可能导致数据丢失
是否不可能有一个long long int 2d动态数组?
答案 0 :(得分:4)
您获得的警告与您的数组由long long
元素组成的事实完全无关。系统会针对您的i
变量或N
发出警告。最有可能导致问题的是N
。什么是N
?怎么声明?我怀疑它也是long long
。
在C ++语言中,用于指定内存大小(以及顺便提一下,数组大小和索引)的类型称为size_t
。显然在您的平台上size_t
是32位unsigned int
类型(32位平台?)的同义词。编译器正在尝试将N
(显然是64位类型)转换为size_t
并触发警告。
在任何情况下,绝对没有理由坚持使用long long
i
或N
。为两者选择更合理的类型(或将N
转换为该类型),警告将消失。
答案 1 :(得分:0)
试试这个
#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
也没有警告