应该SomeClass*initialEl = new SomeClass [5]; 必须编译,假设SomeClass没有非公开声明的默认构造函数?考虑:
/*
* SomeClass.h
*
*/
#ifndef SOMECLASS_H_
#define SOMECLASS_H_
class SomeClass
{
public:
SomeClass(int){}
~SomeClass(){}
};
#endif /* SOMECLASS_H_ */
/*
* main.cpp
*
*/
#include "SomeClass.h"
int main()
{
SomeClass* initialEl = new SomeClass[5];
delete[] initialEl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ memory-management class dynamic-memory-allocation dynamic-arrays
我试图动态创建数组,然后通过使用变量构造数组名称来填充它们,但我收到以下警告
警告:in_array()期望参数2为数组,给定为null警告:array_push()期望参数1为数组,给定为null
对于单个数组,此方法有效,但对于数组数组,这不起作用.该怎么做?
<?php
for ($i = 1; $i <= 23; ++$i)
{
$word_list[$i] = array("1");
}
for ($i = 1; $i <= 23; ++$i)
{
$word = "abc";
$arrayName = "word_list[" . $i . "]";
if(!in_array($word, ${$arrayName}))
{
array_push($$arrayName , $word);
}
}
?>
Run Code Online (Sandbox Code Playgroud) 我使用三维char数组实现了一个bloom过滤器(位表),它运行良好,直到达到无法再分配内存并给出bad_alloc消息的程度.在分配600MB后,它在下一个扩展请求中给出了这个错误.
布隆过滤器(阵列)预计会增长到8到10GB.
这是我用来分配(扩展)位表的代码.
unsigned char ***bit_table_=0;
unsigned int ROWS_old=5;
unsigned int EXPND_SIZE=5;
void expand_bit_table()
{
FILE *temp;
temp=fopen("chunk_temp","w+b");
//copy old content
for(int i=0;i<ROWS_old;++i)
for(int j=0;j<ROWS;++j)
fwrite(bit_table_[i][j],COLUMNS,1,temp);
fclose(temp);
//delete old table
chunk_delete_bit_table();
//create expanded bit table ==> add EXP_SIZE more rows
bit_table_=new unsigned char**[ROWS_old+EXPND_SIZE];
for(int i=0;i<ROWS_old+EXPND_SIZE;++i)
{
bit_table_[i]=new unsigned char*[ROWS];
for(int k=0;k<ROWS;++k)
bit_table_[i][k]=new unsigned char[COLUMNS];
}
//copy back old content
temp=fopen("chunk_temp","r+b");
for(int i=0;i<ROWS_old;++i)
{
fread(bit_table_[i],COLUMNS*ROWS,1,temp);
}
fclose(temp);
//set remaining content of bit_table_to 0
for(int i=ROWS_old;i<ROWS_old+EXPND_SIZE;++i)
for(int j=0;j<ROWS;++j)
for(int k=0;k<COLUMNS;++k) …Run Code Online (Sandbox Code Playgroud) 我确定这是一个小的但我一直在初始化错误,关于我如何在初始化之前继续尝试使用它.
#include <iostream>
using namespace std;
int main()
{
int* ordered;
ordered[0] = 5;
cout << ordered[0];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
奖金问题,我可以*ordered用来访问起始地址并使用循环数组*ordered++吗?
下学期,我将用C进行游戏(特别是C89).来自C#等高级语言,我要做的第一件事就是制作一个实体列表(游戏对象),每一帧,循环遍历每个实体并运行他们的Update和Draw方法.将这种意识形态转换为C,我的想法是开发一个"List"结构,它包含一个指向void指针数组的指针,并使函数能够从列表中添加,获取和删除条目.如果将对象添加到List但数组太小,则将数组重新分配为两倍大的数组.有了这个系统,当我生成一个敌人时,我可以将一个指向其Entity结构的指针添加到List中,然后每个帧循环遍历List,将每个void指针元素作为指向实体的指针,然后将它传递到entity_update(Entity *)和entity_draw(Entity *)相应的方法.
在我看来,只要我100%确定只在List数组中放入指向Entity结构(转换为void指针)的指针,就不会有任何问题......但是当我向同学提到这个时,他说他认为将void指针转换为指向其他东西的指针存在性能缺陷.从我可以看出,在互联网上环顾四周,真正的问题是编译器无法正确优化代码,因为编译器事先知道指针指向哪种类型.在我的情况下,这最终会成为一个问题吗,我想循环通过一个潜在的大型虚拟指针数组,每秒六十次?在实体指针数组中存储指向实体的指针并没有什么大不了的,具有大的,预定义的最大大小,然后进行绑定检查以确保如果没有剩余空间则不会产生敌人数组......但我只是想在开始研究游戏的基本底层引擎之前确定一下.
我有一个有趣的问题.我在这里简化它.
我有一个包含的a = { 13, 56, 76, 24}
向量:另一个向量包含:b = { 2, 74, 16, 29}
我想交换价值观,让我们说56和2.所以我希望我的数组是:
a = {13, 2, 76, 24}
b = {56, 74, 16, 29}
所以问题是:我向我的向量添加值,我push_back不知道这些值在每个向量中的存储位置.所以我知道2矢量中有某处,矢量中b有56某处a.我该如何进行此更改?
我想清除并将动态数组的所有元素设置为0.我想我可以做到
从长远来看,在良好实践方面,我应该避免过度使用delete [] somePointer和new(如果我正确地清理它),还是它真的没有任何区别?
我有未知数量的记录,我需要将所有记录放在字符串二维数组中.
我不知道记录的数量,因此,不知道字符串2d数组初始化所需的行数和列数.
目前我使用如下:
String[][] data = new String[100][100];
Run Code Online (Sandbox Code Playgroud)
这里我硬编码行数和列数,但需要在字符串2d数组中允许的动态大小.任何建议请!
Rgrds
我正在尝试使用动态数组将小写单词更改为大写单词.在遇到"堆腐败"之前,我碰到了一些我没有遇到的事情.有人可以向我解释我做错了什么,可能有助于解决这个问题?
#include <iostream>
#include <cctype>
#include <new>
#include <string>
using namespace std;
int main()
{
int i;
int w;
char *p;
string str;
cout << "Change lowercase to UPPERCASE!" << endl;
cout << "Enter Word: ";
cin >> str;
w = str.length();
p = new (nothrow) char[w];
if (p == nullptr)
cout << "Error: memory could not be allocated" << endl;
else
{
cout << "Re-Enter Word: ";
cin >> p[w];
for (i = 0; i < w; i++)
cout …Run Code Online (Sandbox Code Playgroud) 我对Fortran的典型使用始于读取未知大小的文件(通常为5-100MB).我目前的数组分配方法涉及读取文件两次.首先确定问题的大小(分配数组),然后第二次将数据读入这些数组.
是否有更好的尺寸确定/阵列分配方法?我刚刚阅读了另一篇文章中的自动数组分配(例如下面的例子),这看起来更容易.
array = [array,new_data]
Run Code Online (Sandbox Code Playgroud)
有哪些选择及其优缺点?