2
    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 动态数组吗?

4

2 回答 2

4

long long您收到的警告与您的数组由元素组成的事实完全无关。警告是针对您的i变量或针对您的N. 很可能是N导致问题的原因。是什么N?它是如何声明的?我怀疑它也是一个long long.

在 C++ 语言中,用于指定内存大小(顺便说一下,数组大小和索引)的类型称为size_t. 显然在您的平台上是 32 位类型(32 位平台?)size_t的代名词。unsigned int编译器正在尝试将您N的 64 位类型转换为size_t并触发警告。

无论如何,绝对没有理由坚持使用long longfori或 for N。为两者选择更合理的类型(或转换N为该类型),警告将消失。

于 2013-06-06T13:30:42.957 回答
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 也不会发出警告

于 2013-06-06T12:27:33.093 回答