gpt4 book ai didi

c - 没有 malloc 就没有段错误

转载 作者:行者123 更新时间:2023-11-30 21:03:47 25 4
gpt4 key购买 nike

有一个表应该按照确定的函数增长。每次表满时,都会调用函数addMemory,将当前表->表大小加倍。一切似乎都工作正常,但是,为了测试程序,我评论了 addMemory 调用,因此我预计会出现段错误,因为没有向操作系统请求新内存,但它并没有失败,而且实际上是将数据写入分配的内存空间旁边,没有任何错误。我想知道为什么会出现这种情况??

代码在这里:

 int main(){
//user* newUser = (user*)malloc(BASE_SIZE*sizeof(user));
user* newUser = (user*)malloc(sizeof(user));

userTable* table = (userTable*)malloc(sizeof(userTable));
newUser->age = 1000;
table->length = 0;
table->table= newUser;
table->length++;

int i = 0;
int memlimit = 1000;
for(i = 1; i < memlimit; i++){
if(memZone(table->length-1) != memZone(table->length)){
//this is the line that asks for more memory
addMemory((void*)table,"userTable");
printf("mem pos =%i, age = %i\n",table->length,table->table[i-1].age);
}
table->table[i].age = (1000 + i);
table->length++;

}

printf("All memory have been successfully allocated \n");
int anything;
while(scanf("%i",&anything)){
reduceMemory((void*)table,"userTable");
printf("Age = %i \n",table->table[table->length - 1].age);

}
}

结构体定义如下:

typedef struct {
/* Username unique for this user in the system */
char username[25];

/* User name */
char name[100];

/* Age */
unsigned int age;

/* User city */
char city[128];

} user;

/* Table of users */
typedef struct {
/* Array of users */
user* table;
/* Number of registers in the table */
int length;
} userTable;

最佳答案

在现代 C 库中,malloc 通常只是从内核分配的较大块中分配内存。它不会每次都向内核请求更多内存,那样效率很低。

因此,CPU 和操作系统内核可能不知道发生了什么问题,但这是具有未定义行为的无效代码,因此不要这样做。特别是,下一次调用 malloc 可能会重新分配您已经用于其他用途的内存。

关于c - 没有 malloc 就没有段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com