gpt4 book ai didi

c - 为什么 memset 不能正确填充二维整数数组?

转载 作者:行者123 更新时间:2023-12-04 10:29:27 25 4
gpt4 key购买 nike

我使用 memset() 来填充一个二维整数数组,如下所示。

int main(){
int** a = calloc( 2, sizeof(int*) );
int i = 0;
for( ; i<2; i++ ){
a[ i ] = calloc( 2, sizeof( int ) );
}

memset( a, 0, 4 * sizeof( int ) ) ;

for( i = 0; i < 2; i++ ){
int j = 0;
for( ; j < 2; j++ ){
printf( "%d ", a[i][j] );
}
printf("\n");
}
}

输出:

Segmentation fault

但是如果我将 memset( a, 0, 4 * sizeof( int ) ) 替换为:

for( i = 0; i < 2; i++ ){
int j = 0;
for( ; j < 2; j++ ){
a[ i ][ j ] = 0;
}
}

输出是正确的:

0 0 
0 0

谁能告诉我为什么 memset() 在那里不起作用?

最佳答案

在分配内存的时候,你已经分配了2, sizeof(int*) 等于a,而在做memset()的时候,你使用 4 * sizeof(int)。它们不一定代表相同数量的内存(更重要的是,这甚至不是您想要的)因此分配的内存会超限。这会调用 undefined behavior这会导致段错误。

话虽如此,您不需要memset()calloc()内存置为0。它已经是了。

关于c - 为什么 memset 不能正确填充二维整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34378857/

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