分配2D动态数组(使用long long int)

时间:2013-06-06 12:09:41

标签: c++ dynamic-arrays

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

2 个答案:

答案 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 iN。为两者选择更合理的类型(或将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

也没有警告