C编程EXC_BAD_访问非常基本的C程序
我对C编程相当陌生。我需要写一个与动态数组一起工作的程序。(当数组已满时,接受值并将其大小加倍)。我的程序已经完成,编译工作正常,但我一直在注释行中得到这个错误:thread1:EXC_BAD_ACCESS(code=2,address:(一些长地址) 我读过这篇文章,似乎我指向了null。但是null测试没有起到作用。我以前在其他程序中遇到过这个问题,我似乎缺少一个基本点。 谁能帮我一下吗! 这是我的代码:C编程EXC_BAD_访问非常基本的C程序,c,exc-bad-access,C,Exc Bad Access,我对C编程相当陌生。我需要写一个与动态数组一起工作的程序。(当数组已满时,接受值并将其大小加倍)。我的程序已经完成,编译工作正常,但我一直在注释行中得到这个错误:thread1:EXC_BAD_ACCESS(code=2,address:(一些长地址) 我读过这篇文章,似乎我指向了null。但是null测试没有起到作用。我以前在其他程序中遇到过这个问题,我似乎缺少一个基本点。 谁能帮我一下吗! 这是我的代码: #include <stdio.h> #include <stdli
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int *value;
int size;
int MAX;
} DynArray;
void dyn_array_add (DynArray* array){
int wert;
int *temp;
printf("Geben Sie einen Wert ein:\n");
scanf("%i", &wert);
if (array->MAX==array->size) {
for (int i= 0; i<array->MAX; i++) {
temp[i] = array->value[i]; // error occurs HERE
}
free(array->value);
array->MAX = array->MAX*2;
array->value=malloc(sizeof(int)* array->MAX);
for (int i= 0; i<array->MAX; i++) {
array->value[i] = temp[i];
}
}
array->value[array->size]= wert;
array->size++;
for (int i = 0; i < array->MAX; i++) {
printf("Value[%i]: %i \n", i, array->value[i]);
}
}
int main(int argc, const char * argv[]) {
DynArray* array;
array = (DynArray*)malloc(sizeof(DynArray));
array->MAX=5;
array->size=0;
array->value=malloc(sizeof(int)* array->MAX);
while (1) {
dyn_array_add(array);
}
return 0;
}
#包括
#包括
类型定义结构{
int*值;
整数大小;
int MAX;
}DynArray;
无效动态数组添加(动态数组*数组){
int wert;
内部*温度;
printf(“Geben Sie einn Wert ein:\n”);
scanf(“%i”和“wert”);
如果(数组->最大==数组->大小){
对于(int i=0;iMAX;i++){
temp[i]=数组->值[i];//此处发生错误
}
自由(数组->值);
数组->最大值=数组->最大值*2;
数组->值=malloc(sizeof(int)*数组->最大值);
对于(int i=0;iMAX;i++){
数组->值[i]=temp[i];
}
}
数组->值[数组->大小]=wert;
数组->大小++;
对于(int i=0;iMAX;i++){
printf(“值[%i]:%i\n”,i,数组->值[i]);
}
}
int main(int argc,const char*argv[]{
DynArray*阵列;
数组=(DynArray*)malloc(sizeof(DynArray));
数组->最大值=5;
数组->大小=0;
数组->值=malloc(sizeof(int)*数组->最大值);
而(1){
动态数组添加(数组);
}
返回0;
}
显然,由于您没有为
temp
分配内存,您是否考虑过学习如何使用调试器?
temp[i] = array->value[i]; // error occurs HERE