C语言 垃圾值随机添加到数组



我正在初始化struct node指针的3d数组,由于某种原因,有时会随机添加一个垃圾值到我的数组。以下是相关代码:

for (int i=0; i<3; ++i) {
new->dp[i] = malloc(3*sizeof(int*));
for (int j=0; j<3; ++j) {
new->dp[i][j] = malloc((n+1)*sizeof(int));
for (int k=0; k<=n; ++k) {
new->dp[i][j][k] = new_node(0, null);  /* every entry starts at 0 */
printf("i: %d, j: %d, k: %d, dp[i][j][k]->data: %d.n", i, j, k, (new->dp[i][j][k])->data);
if (j>0&&k>0) printf("seq->dp[0][1][1]->data: %d.n", (new->dp[0][1][1])->data);
}
}
}

大约一半的时间与n=10,它似乎工作良好。另一半,我得到这个奇怪的输出:

i: 0, j: 1, k: 1, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 2, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 3, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 4, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 5, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 6, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 7, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 0.
i: 0, j: 1, k: 8, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 1884296384.
i: 0, j: 1, k: 9, dp[i][j][k]->data: 0.
seq->dp[0][1][1]->data: 1884296384.

k=8时,dp[0][1][1]节点的数据突然变成了一些垃圾值!它总是当k=8,但值在程序运行之间变化。在整个项目的剩余时间里,它也不会再改变。作为参考,下面是我的节点结构:

struct node {
int data;
struct node *next;
};
struct node* new_node(int i, struct node *after) {
struct node *new = malloc(sizeof(struct node));
new->data = i;
new->next = after;
}
有没有人能告诉我为什么有时会发生这种情况?它似乎没有发生时,n<10。提前感谢!

数组的元素是指向节点的指针。但是你是在为整数分配空间,而不是指针。除非整数和指针的大小相同(现在不太可能),否则没有分配足够的空间。应该是:

new->dp[i][j] = malloc((n+1)*sizeof(struct node*));

最新更新