【发布时间】:2017-03-05 11:49:45
【问题描述】:
我是 C 初学者,我正面临这个问题:我创建了一个基于快速矩阵分配方法的函数(Oliveira 和 Stewart,“Writing Scientific Software”,第 94 页) 我想将它用于任何数据类型。 因此,我将其更改如下:
void ** malloc_array2d(size_t m, size_t n){
/* pointer to array of pointers */
void ** pointer;
size_t i;
/* allocate pointer array of length m */
pointer = malloc(m*sizeof(void));
if(pointer == NULL){
return NULL;
}
/* allocate storage for m*n entries */
pointer[0] = malloc(m*n*sizeof(void));
if (pointer[0] == NULL) {
free(pointer);
return NULL;
}
/* set the pointers */
for (i = 1; i < m; i++) {
pointer[i] = pointer[0] + i*n;
}
return pointer;
}
但我遇到分段错误。
问题是:如何允许不同数据类型的内存分配,因为 sizeof(void) 不起作用(实际上它只返回 1)? 任何反馈都非常感谢。 谢谢。
【问题讨论】:
-
一只手拍的声音是什么?这与询问 no type 的大小是相同的哲学问题。您可能应该分配一些 bytes。
-
您必须告诉
malloc_array2d元素类型的大小,因为它无法知道您是否不这样做。你最终会得到类似void **malloc_array2d(size_t m, size_t n, size_t element_size);。 -
sizeof(void)无效。 (返回 1 作为 GCC 扩展) -
malloc的返回类型和sizeof(void)有什么关系?void*与void不同。还有你所说的“某种替代”是什么意思? -
你的问题可能已经有了答案here。
标签: c arrays malloc out-of-memory void-pointers