以下程序因大n(n> 200)的细分而崩溃,请你帮帮我。
.modal.modal-alert .modal-dialog .modal-content .modal-header {
padding: 9px 15px;
border-bottom: 1px solid #eee;
background-color: #0480be;
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
.modal.modal-alert .modal-dialog .modal-content {
border-radius: 9px;
padding: 0;
}
答案 0 :(得分:3)
向指针添加整数时,编译器会执行指针运算。因此编译器将hash + i
翻译成(char*)hash + i * sizeof(struct node)
之类的内容。为您计算偏移量以字节为单位,然后应用以字节为单位。
因此,您的代码等同于
(char*)hash + i * sizeof(struct node) * sizeof(struct node)
这将超出数组边界,调用未定义的行为。
总结评论时,请使用(hash + i)
或更简洁(在我看来)hash[i]
。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
struct node {
char name[16];
char num[8];
};
int main(void) {
size_t n;
if (scanf("%zu", &n) != 1) {
return 1;
}
struct node *hash = malloc(n * sizeof *hash);
if (hash == NULL) {
return 1;
}
for (size_t i = 0; i < n; i++) {
if (scanf("%15s %7s", hash[i].name, hash[i].num) != 2) {
free(hash);
return 1;
}
}
for (size_t i = 0; i < n; i++) {
printf("%s %s\n", hash[i].name, hash[i].num);
}
free(hash);
}