C中的三角数组

triangular array in C

有人知道如何在 C 中创建三角数组吗?我尝试使用 malloc,首先用于第一个 "dimension",然后我使用 for 循环使用 malloc 创建第二个维度,但我的领导老师说这是不正确的。

 int **price_of_diamond, i, j;
price_of_diamond=malloc((count*sizeof(int)));
for(i=0;i<conut;++i){
    price_of_diamond[i]=malloc((i-1)*sizeof(int));
}

任务的提示是 "create triangular array(getting shorter arrays)"。 程序在理论上可行,但老师说这是错误的实现,但没有说什么不好

创建数组并不是将它们相互初始化。您不能通过再次 malloc-ing 将数组 "add a dimention" 分配给数组,这只会将新数组重新分配给曾经是第一个数组的数组。解决方案是将其初始化为 3d 数组,如下所示:

const int sizeDimOne=4; // size of the first dimention
const int sizeDimTwo=4; // size of the second dimention
const int sizeDimThree=4; // size of the third dimention
int **threedim = malloc(sizeDimOne*sizeDimTwo*sizeDimThree*sizeof(int)); // declaring an array is simple : you just put in the values for each dimention.

永远不要忘记在代码末尾释放它,数据泄漏很糟糕! :)

free(array); // Super important!

将创建数组。 如果您想手动分配值,让我从一个很棒的网站上举一个例子:http://www.tutorialspoint.com/cprogramming/c_multi_dimensional_arrays.htm

/*Manually assigning a double-dimentional array for example.
* a very simple solution - just assign the values you need,
* if you know what they are. */
int a[3][4] = {  
{0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
{4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
{8, 9, 10, 11}   /*  initializers for row indexed by 2 */
};

编辑:看到你的代码,我看到你们使用指针来声明。这是我之前提到的来源之一的一个很好的例子,略有修改,关于确切的用途:

const int nrows = 3; // number of rows.
int **array;
array = malloc(nrows * sizeof(int *)); /* That's because it's an array of pointers in here,
* since you're using the pointer as an array, the amount of datarequired changes.
* dont forget to free! 
*/

第一次分配应该使用 (int*) 而不是 (int)。
您不应该在循环中使用大小 <= 0 的 malloc(当 i=0 和 i=1 时)。使用 (i+1),您的数组将从 1 到计数大小不等。

price_of_diamond = malloc(count * sizeof(int*));
for(i=0;i<count;++i) price_of_diamond[i]=malloc((i+1)*sizeof(int));