我有动态内存分配问题.这是代码所以请帮忙.
#include <stdio.h>
int i;
typedef struct{
int A;
}node;
typedef struct Model
{
node *m;
} Model;
Model M;
void initialize(Model *a, int size)
{
a->m = (node*) malloc(size);
}
void model_init(Model *a, int len)
{
int i;
for (i=0;i<len;i++) a->m[i].A = 20;
}
int main()
{
initialize(&M ,10);
model_init(&M, 10);
for (i=0;i<10;i++) printf("%d\n",M.m[i].A);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个具有10个节点的模型,并且我想为变量A中的节点赋值.printf显示(-1819044973,-1819044973,14128019,3969,0,0,0 ......)
我只想说它例如Mm [2] .A = 20
我究竟做错了什么?请帮忙.
TY
我研究了两种不同的方法来为矩阵的元素分配内存
方法n.1
int** matrix = new int*[rows];
for (int i = 0; i < rows; ++i)
matrix[i] = new int[cols];
Run Code Online (Sandbox Code Playgroud)
方法n.2
int** matrix = new int*[rows];
if (rows)
{
matrix[0] = new int[rows * cols];
for (int i = 1; i < rows; ++i)
matrix[i] = matrix[0] + i * cols;
}
Run Code Online (Sandbox Code Playgroud)
我可以弄清楚方法n.1做了什么,但我无法弄清楚究竟应该在方法n.2中做什么if子句(我会在没有它的情况下实现它,并且它不起作用,使用if子句,它...)
编辑:这是一个显示我的问题的代码.为什么加载需要这么长时间(~30秒)?
Codepad拒绝显示输出(超时),所以如果你想运行它,只需自己编译即可.
另外,为什么一旦程序启动就不执行cout <<语句?
我在Java和C++中运行了一些小测试,创建了大量非常小的对象(没有类成员,构造函数中没有任何东西),而Java显然更快(我的意思是C++似乎非常慢).我敢打赌这与JVM有关,但是以哪种方式?
编辑:
我使用的类是这样的(因为我说没有类成员,在构造函数中没有做任何事)在C++中:
class foo{
public:
foo(){}
~foo(){}
}
Run Code Online (Sandbox Code Playgroud)
在Java中:
public class Foo{
public Foo(){}
}
Run Code Online (Sandbox Code Playgroud)
我做的小测试只是关于在一个循环中分配大量的对象(连续大约1000000000).我在使用Linux的同一台机器上使用了GCC 4.7.2和Java 1.7到OpenJDK的实现.
我敢打赌,它确实与内存池分配有关,这表明JVM拥有不需要的内存.
我仍然感到困惑,因为我认为JVM实际上会更慢,计算指针引用和分配内存.
我正在阅读一个将指针初始化为空的代码,最初我认为该代码没有将新内存分配给用于存储二维值数组的指针(它确实如此),这让我想知道,是一个初始化为空指针的指针分配的内存?
class Int8_tSet : public GridSet
{
public:
int8_t** set;
//
//
Int8_tSet():set(0) {}
Int8_tSet( const Int8_tSet& x ):set(0) {copy(x);}
virtual ~Int8_tSet() { Free2DArray(set);}
//
// --- opeartor
int8_t operator() ( IntVector2D x ) const {return set[x.i][x.j];}
int8_t& operator() ( IntVector2D x ) {return set[x.i][x.j];}
// --- function
void Set();
void Set(int8_t val);
void Set( IntVector2D x ){ NS_GRIDDATA::Set(x,*this,(int8_t)-1); }
void Set( IntVector2D x,int8_t val){ NS_GRIDDATA::Set(x,*this,val); }
void Switch();
// --- output & input
void Output(std::ostream& out ) const;
void …Run Code Online (Sandbox Code Playgroud) 我正在阅读一个关于 BTree 的程序,在那里我遇到了这个:BTreeNode **C。我知道它是一个二维数组,但它被初始化为C=new BTreeNode *[2*t];. 我无法理解这一点:这是一个具有动态行和 2t 列的 2d 数组吗?谢谢。
这是我为GCC编译器编写的代码.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p = (int *)malloc(9 * sizeof(char));
p[0] = 2147483647;
p[1] = 2147483647;
p[2] = 1025;
printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
1, 2147483647, 2147483647, 1025
Run Code Online (Sandbox Code Playgroud)
我的问题是,虽然我只为指针分配了9个字节,但它似乎使用了所有12个字节.结果是相同的(除非编译器警告),如果我转换(char *)而不是(int*).分配malloc()是完整的圆圈吗?即它总是以指针的数据类型的倍数分配,而不管我们分配的是什么?或者具体实施?
我想为数组数组动态分配内存,知道行数将为 n,但我不想为每行分配比需要更多的内存,这将是 i = 1:n ,每行的元素数 = i,我事先知道这一点。
int [] a = new int[n];
for (int i=0; i<n; i++)
Run Code Online (Sandbox Code Playgroud)
我刚刚开始学习 Java,我是新手。据我所知,第一行将为 n 个元素(行数)分配内存,我想要做的是在每次迭代时创建一个新的 i 个元素数组。
我想知道在 C++ 中调用类的构造函数时会发生什么。更具体地说,调用了哪些其他函数以及如何调用。是调用某个内置函数在栈上构造对象,还是调用malloc在堆上构造对象new?是否有使用的默认分配器?
一般来说,是否可以在不调用构造函数的情况下使用类和对象?
编辑:一个可能有助于我试图解决的好问题是:为什么构造函数不返回任何东西?最初,我认为新手程序员会期望构造函数返回对象,但事实并非如此。会发生什么?
有没有办法用X个相同的对象快速初始化一个新的ArrayList对象?
这是一个示例代码:
private List<String> initStringArrayList(int size, String s) {
List<String> list = new ArrayList<>(size);
while (size-- > 0) {
list.add(s);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
我想要得到相同的结果,但对于大的“大小”值来说要快得多。
当然,我可以使用这段代码:
private List<String> initStringArrayList(int size, String s) {
String[] array = new String[size];
Arrays.fill(array, s);
return new ArrayList<>(Arrays.asList(array));
}
Run Code Online (Sandbox Code Playgroud)
但是 ArrayList<>() 的构造函数会复制整个数组,而不是在内部使用它。这是不可接受的。
还有其他方法吗?我需要一个 ArrayList 作为结果,而不仅仅是一个列表。它应该是任何类型,而不仅仅是字符串。
谢谢您的任何答复!
我的问题:
intfloatcharstr这些 var 类型都有为其分配的标准化字节分配。但我从来没有了解过这一点的指针:
这些“地址”存储变量,其内容看起来只是一系列字母数字字符。
C++代码:
int *ptr1;
char *ptr2;
void *ptr3;
Run Code Online (Sandbox Code Playgroud)
那么上面列出的指针的标准内存分配是什么呢?一般来说呢?