Tag: 动态数组

创建一个int数组,其大小基于NSArray的大小

我正在尝试根据运行时获得的大小创建并归零一个int数组: size = [gamePiece.availableMoves.moves count]; //debugger shows size = 1; int array[size]; //debugger shows this as int[0] ! memset(array, 0, size); indexes = array; size和indexes都是这个类的ivars: int size; int* indexes; 不过,我最终得到了一个0长度的数组。 如何使用[gamePiece.availableMoves.moves count]指示的大小创建它?

在C中动态增加数组大小

我需要根据用户输入增加2个数组的长度。 我正在使用下面的代码。 但输出与用户输入不匹配。 #include int main() { int i=0, key=0, size[key], time[key]; while (key!=-1) { printf(“Insert value for size : “); scanf(“%d”,&size[i]); printf(“Insert value for time : “); scanf(“%d”,&time[i]); i++; printf(“Run again Press-1 or Exit : “); scanf(“%d”,&key); } int x=0; for (x ; x<i ; x++) { printf("%d %d\n",size[x],time[x]); } return 0; } 当用户输入值时: […]

C中二维数组的内存分配

我正在写一个multithreadingC程序,我有一个错误。 我有一个全局声明的2D数组array worker_table : int **worker_table; 并在主要分配如下: worker_table = (int**) calloc(number_of_workers*2,(sizeof(int))); 这是工作者function: void *Worker(void *worker_id) { my_id = (int)worker_id; //id of the worker printf(“Line 231\n”); printf(“My id is %d\n”,my_id); my_customer = worker_table[my_id][1];//line 233 printf(“Line 234\n”); int my id; 错误发生在第234行之前,我认为第233行出了什么问题,但我无法弄清楚它是什么。

使用指针在C中查找2D数组的尺寸

我在C中创建一个2D数组,如下所示: int **arr; arr = malloc(rows * sizeof(int *)); for (i = 0; i < rows; i++) arr[i] = malloc(cols * sizeof(int)); 现在,我打电话给: func(arr) 在函数func ,如何计算行和列尺寸?

正确分配多维数组

这个问题的目的是提供一个关于如何在C中动态正确分配多维数组的参考。这是一个经常被误解的主题,即使在一些C编程书籍中也很难解释。 因此,即使是经验丰富的C程序员也很难做到正确。 我从编程教师/书籍/教程中了解到,动态分配多维数组的正确方法是使用指针指针。 然而,SO上的几个高代表用户现在告诉我这是错误的和不好的做法。 他们说指针指针不是数组,我实际上并没有分配数组,而且我的代码不必要地慢。 这就是我被教导分配多维数组的方法: #include #include #include int** arr_alloc (size_t x, size_t y) { int** pp = malloc(sizeof(*pp) * x); assert(pp != NULL); for(size_t i=0; i<x; i++) { pp[i] = malloc(sizeof(**pp) * y); assert(pp[i] != NULL); } return pp; } int** arr_fill (int** pp, size_t x, size_t y) { for(size_t i=0; i<x; i++) […]

返回VLA是否安全?

以下代码使用堆: char* getResult(int length) { char* result = new char[length]; // Fill result… return result; } int main(void) { char* result = getResult(100); // Do something… delete result; } 因此必须在某处删除result ,最好由所有者删除。 根据我的理解,下面的代码使用名为VLA的扩展,它是C99的一部分,而不是C ++标准的一部分(但是由GCC和其他编译器支持): char* getResult(int length) { char result[length]; // Fill result… return result; } int main(void) { char* result = getResult(100); // Do something… […]

C – 动态数组

我不太明白指针如何与C数组一起使用。 这是我得到的一些代码: int arrayOne[] = {1, 2, 3}; int arrayTwo[] = {4, 5, 6, 7}; int **arrayThree = (int **)malloc(2 * sizeof(int)); arrayThree[0] = arrayOne; arrayThree[1] = arrayTwo; for (int i = 0; i < 2; i++) { int *array = arrayThree[i]; int length = sizeof(array) / sizeof(int); for (int j = 0; j < […]

用户定义的类型,动态大小为C

我想定义一个新的数据类型,由一个由用户输入的大小的数组组成。 例如,如果用户输入128,那么我的程序应该创建一个新类型,它基本上是一个16字节的数组。 这个结构的定义需要是全局的,因为我将在我的程序中使用该类型。 这个结构必须有一个动态大小,因为我最终会有一个由这种类型的变量填充的HUGE数据库。 我现在的代码是: struct user_defined_integer; . . . void def_type(int num_bits) { extern struct user_defined_integer { int val[num_bits/sizeof(int)]; }; return; } (这不起作用) 我发现,与我的问题最接近的是: 我需要在C中创建一个全局数组,其大小由用户输入 (这没有帮助) 有没有办法做到这一点,以便我的结构在整个文件中被识别?

“释放的指针未被分配。”在malloc之后出错,realloc

我有以下代码的此错误: int main(){ point *points = malloc(sizeof(point)); if (points == NULL){ printf(“Memory allocation failed.\n”); return 1; } other_stuff(points); free(points); return 0; } void other_stuff(point points[]){ //stuff realloc(points, number*sizeof(point)) } 我搜索过,但只找到了很明显没有分配的例子。 在这里,我使用malloc初始化points ,后来用realloc改变了它的大小; 那么当我来free时,指针“未分配”怎么样?

从动态数组中删除元素

所以,我有这个: #include #include #include void remove_element(int* array, int sizeOfArray, int indexToRemove) { int* temp = malloc((sizeOfArray – 1) * sizeof(int*)); // allocate an array with a size 1 less than the current one memcpy(temp, array, indexToRemove – 1); // copy everything BEFORE the index memcpy(temp+(indexToRemove * sizeof(int*)), temp+((indexToRemove+1) * sizeof(int*)), sizeOfArray – indexToRemove); // copy […]