【发布时间】:2014-03-16 19:42:28
【问题描述】:
所以,我对 C 语言非常缺乏经验,并且遇到了麻烦。
我必须初始化一定数量的对象以及在每个对象中初始化两个变量。我已经为单个对象编译和运行了预先编写的代码。
我最初转换了行:
MyObject object;
到
MyObject object[n]; //where n = # of objects needed
我修改了其他类似的行,例如:
mem = (unsigned char *)malloc( MEM_SIZE);
...
memset( &object, 0, sizeof(MyObect));
object.memory = mem;
到
mem = (unsigned char *)malloc(MAX_MEM_SIZE + (n*sizeof(MyObject)));
...
for( i = 0; i < n; i++){
memset( &object[i], 0, sizeof(MyObect));
object[i].memory = mem;
object[i].var1 = i;
object[i].var2 = n;
}
当我尝试运行已编译的程序时,我不断收到分段错误,即使我尝试仅使用单个对象运行它并且不确定这是否完全误解了我想要做的事情或简单的事情。
【问题讨论】:
-
我对您的代码感到困惑。
MEM_SIZE是什么?为什么不分配n * sizeof(MyObject)?你能显示MyObject的定义吗? -
不要投
mallocs. -
扩展@arshajii 所说的内容:Do I cast the result of malloc?
-
强制转换 malloc 是无害的,但没有必要,因为它返回类型 void*,可以将其分配给任何指针而无需强制转换。
-
我们需要
struct的定义。MyObject.memory是什么?指针?
标签: c arrays pointers memory-management initialization