感谢您抽出时间阅读本。
在我的问题“载体”被定义为一个一维整数维阵列。
因此矢量的阵列将是一个2D维阵列,其中每个载体可以是不同的长度。
有人问我使用方法:
INT ** vectors- 2D阵列
INT大小-an整数,它表示许多载体内如何存在**矢量
INT *尺寸-一个整数的一维数组,表示向量的长度
例如,用于:
向量= {{4,3,4,3},{11,22,33,44,55,66},NULL,{5},{3,33,333,33,3}}。
大小为5(有5个载体内载体)。
尺寸是{4,6,0,1,5}(4是第一矢量的长度等)。
大小是由用户在主开始输入()和**矢量&*尺寸dynimacilly与大小的值进行分配。
有人问我写的函数:
INT的init(INT ***载体,INT **尺寸,INT尺寸),该初始化矢量**为空值和*大小的阵列的为0的数组。
我想出了这个代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int init(int*** vectors, int** sizes, int size)
{
int i, k,j;
printf("check\n");
*vectors = (int**)malloc(size * sizeof(int*));
if (*vectors == NULL)
return 0;
for (i = 0; i < size; i++)
{
*(vectors + i) = NULL;
}
printf("check 2\n");
for (k = 0; k<size; k++)
{
if (*(vectors+k) != NULL)
printf("didn't work\n");
else
printf("current is null\n");
}
*sizes= (int*)malloc(size * sizeof(int));
if (*sizes == NULL)
return 0;
for (j= 0; j < size; j++)
{
*(sizes + j) = 0;
printf("%d ", *(sizes + j));
}
printf("\n");
return 1;
}
int main()
{
int size, i;
int** vectors = NULL;
int* sizes = NULL;
printf("\nPlease enter an amount of vectors:\n");
scanf("%d", &size);
printf("%d\n", init(&vectors, &sizes, size));
printf("size is %d now\n", size);
// for (i = 0; i < size; i++)
// printf("%d ", *(sizes+i));
printf("check 3\n");
free(sizes);
free(vectors);
printf("check 4\n");
printf("check 5\n");
return 0;
}
忘了提及,初始化如果它不能以其它方式分配存储器和1返回0。
打印“检查”了,所以我可以看到该程序失败。
问题是,不管是什么,打印最后检查后(检查5)程序失败。(运行时检查失败#2)
如果有人能帮助我理解我在做什么错了,我会非常欣赏它。
非常感谢阅读,并有一个美好的一天。 编辑:
我还印阵列尺寸/载体内INIT只是为了看看它打印零/空值,我实际上并不需要做。